Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 网状字节数组解码器_Java_Netty - Fatal编程技术网

Java 网状字节数组解码器

Java 网状字节数组解码器,java,netty,Java,Netty,我在使用Netty 4.0处理数据GPS时遇到问题,如果少于10个设备,我不会有任何问题,但如果超过10个设备,则会出现问题 gps发送的数据包数据以0x78 0x78开始,以0XD和0XA结束,因此我实现了如下channdle句柄: private void init(int port) { ServerBootstrap bootstrap = new ServerBootstrap(); bootstrap.group(bossGroup, workerGroup);

我在使用Netty 4.0处理数据GPS时遇到问题,如果少于10个设备,我不会有任何问题,但如果超过10个设备,则会出现问题

gps发送的数据包数据以0x78 0x78开始,以0XD和0XA结束,因此我实现了如下channdle句柄:

 private void init(int port) {
    ServerBootstrap bootstrap = new ServerBootstrap();
    bootstrap.group(bossGroup, workerGroup);
    bootstrap.channel(NioServerSocketChannel.class);
    bootstrap.childHandler(new ChannelInitializer<SocketChannel>() {
        @Override
        protected void initChannel(SocketChannel ch) throws Exception {
            // Decoders
            byte delimiter[] = {0x0d,0x0A};
            ch.pipeline().addLast("frameDecoder",new DelimiterBasedFrameDecoder(1024, Unpooled.wrappedBuffer(delimiter)));
            ch.pipeline().addLast(new ProtocolDecoder());
        }
    });
    listServer.add(new ServerTracker(bootstrap, port, "XDevice"));
}
private void init(int端口){
ServerBootstrap bootstrap=newserverbootstrap();
bootstrap.group(bossGroup、workerGroup);
通道(NioServerSocketChannel.class);
childHandler(新的ChannelInitializer(){
@凌驾
受保护的void initChannel(SocketChannel ch)引发异常{
//解码器
字节分隔符[]={0x0d,0x0A};
ch.pipeline().addLast(“frameDecoder”,新的DelimiterBasedFrameDecoder(1024,unmooled.wrappedBuffer(delimiter));
ch.pipeline().addLast(新的protocolder());
}
});
添加(新的ServerTracker(引导、端口、“XDevice”);
}
问题: 第一次连接设备时,我可以读取头0x78 0x78,但下一条消息并不总是以0x78 0x78开头
我的代码有什么问题?

我想我的问题可以通过netty.io网站上的“处理基于流的传输”教程来回答是的。你解决问题了吗?还没有,我添加了两个框架处理程序,第一个框架处理程序扩展MessageToByteEncoder,第二个扩展ChannelInboundHandlerAdapter,但我想知道为什么第二个处理程序会先执行?第一个处理程序应该先执行。你能用完整的源代码更新你的问题吗?@trustin,很抱歉迟了回答,我已经更改了我的代码,我有基于头0x78 0x78和尾0x0D 0x0A的板条箱框架处理程序,在头之后我们有1个字节是数据包的长度,所以我必须根据我的问题解决的字节长度等待数据包完成。。。。