netty的LengthFieldBasedFrameDecoder 粘包问题
服务器 定义解码器 super(4096, 0, 2, 0, 0);
客户端
正常情况 :
String host = "127.0.0.1";
int port = 8586;
Socket client = new Socket(host, port);
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
while (!client.isClosed()){
dos.writeShort(2); //输出总长度
dos.writeShort(0x0001); //命令
dos.flush();
Thread.sleep(3000);
}
dos.close();
client.close();
粘包情况:
String host = "127.0.0.1";
int port = 8586;
Socket client = new Socket(host, port);
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
while (!client.isClosed()){
dos.writeShort(3); //输出总长度
dos.writeShort(0x0001); //命令
dos.writeShort(5); //命令
dos.flush();
Thread.sleep(3000);
}
dos.close();
client.close();
这样第一次发是没有问题的,第二次服务器就报错了,以下是错误信息:
io.netty.handler.codec.TooLongFrameException: Adjusted frame length exceeds 4096: 25346 - discarded
at io.netty.handler.codec.LengthFieldBasedFrameDecoder.fail(LengthFieldBasedFrameDecoder.java:501) ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
at io.netty.handler.codec.LengthFieldBasedFrameDecoder.failIfNecessary(LengthFieldBasedFrameDecoder.java:477) ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
at io.netty.handler.codec.LengthFieldBasedFrameDecoder.decode(LengthFieldBasedFrameDecoder.java:403) ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
客户端
正常情况 :
String host = "127.0.0.1";
int port = 8586;
Socket client = new Socket(host, port);
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
while (!client.isClosed()){
dos.writeShort(2); //输出总长度
dos.writeShort(0x0001); //命令
dos.flush();
Thread.sleep(3000);
}
dos.close();
client.close();
粘包情况:
String host = "127.0.0.1";
int port = 8586;
Socket client = new Socket(host, port);
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
while (!client.isClosed()){
dos.writeShort(3); //输出总长度
dos.writeShort(0x0001); //命令
dos.writeShort(5); //命令
dos.flush();
Thread.sleep(3000);
}
dos.close();
client.close();
这样第一次发是没有问题的,第二次服务器就报错了,以下是错误信息:
io.netty.handler.codec.TooLongFrameException: Adjusted frame length exceeds 4096: 25346 - discarded
at io.netty.handler.codec.LengthFieldBasedFrameDecoder.fail(LengthFieldBasedFrameDecoder.java:501) ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
at io.netty.handler.codec.LengthFieldBasedFrameDecoder.failIfNecessary(LengthFieldBasedFrameDecoder.java:477) ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
at io.netty.handler.codec.LengthFieldBasedFrameDecoder.decode(LengthFieldBasedFrameDecoder.java:403) ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
...全文
相关推荐
Netty粘包拆包问题解决方案
主要介绍了Netty粘包拆包问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Netty LengthFieldBasedFrameDecoder:解决拆包粘包问题的解码器
拆包指的是接收方无法完整地接收到发送方传输的数据包,而粘包则是接收方接收到了多个数据包粘在一起的情况。通过使用该解码器,我们能够在后端开发中处理网络通信时,确保数据的完整性并准确解析数据包,从而避免解析错误和业务逻辑混乱的情况发生。通过使用LengthFieldBasedFrameDecoder,我们可以确保从网络中接收到的数据按照指定的长度字段进行拆包,每个完整的数据包都可以被正确解析。它基于长度字段的值来解码数据帧,通过读取数据包中的长度字段来判断数据的边界,从而将一个完整的数据包解析出来。
使用Netty解决TCP粘包和拆包问题过程详解
主要介绍了使用Netty解决TCP粘包和拆包问题过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Netty通信服务器搭建demo
java服务器如何搭建Netty服务器,如何处理通信上出现问题,如何处理粘包。
Netty精粹之TCP粘包拆包问题
什么是粘包拆包,为什么发生拆包粘包问题,如何处理拆包粘包问题


