Java 网状字节数组解码器
我在使用Netty 4.0处理数据GPS时遇到问题,如果少于10个设备,我不会有任何问题,但如果超过10个设备,则会出现问题 gps发送的数据包数据以0x78 0x78开始,以0XD和0XA结束,因此我实现了如下channdle句柄: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);
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个字节是数据包的长度,所以我必须根据我的问题解决的字节长度等待数据包完成。。。。