Netty接收客户端数据,出现粘包,拆包问题解决办法(通俗易懂)

为什么只有TCP会发生粘包

TCP 是一个面向字节流的协议,它是性质是流式的,所以它并没有分段。就像水流一样,你没法知道什么时候开始,什么时候结束。
所以他会根据当前的套接字缓冲区的情况进行拆包或是粘包

举个栗子:

发送端发送了一个由2个100字节组成的200字节的数据包到服务端的缓冲区,接受端从缓冲去一次取80字节的数据,那么第一次取的就是一个不完整的数据包,第二次取就会带上第一个数据包的尾部和下一个数据包的头

网上查了一些资料,大神们说的很专业,理解起来可能不是那么通俗易懂,大多数人找资料,只是为了解决问题

先看问题,如图
在这里插入图片描述
netty去监听客户端数据,一般设备发送数据,会以一定的格式发送,比如"3E" “3F”,可以以"3F"做为一个固定字符去切割数据

netty 拆包方式:

① 消息定长,如每个报文大小固定为200个字节,如果不够,空格补位。(常用)FixedLengthFrameDecoder
② 按照特定字符切割。(常用)DelimiterBasedFrameDecoder
③ 将消息划分为消息头和消息体,消息头中包含消息总长度的字段。(不常用)

NettyClientHandler

发送五次消息

 @Override
    public void channelActive(ChannelHandlerContext ctx
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值