TCP的粘包和拆包

简单地说,比如客户端调用
client.send(“1”);
client.send(“2”);
clinet.send(“3”);
底层的TCP可能会把这几个小包合起来成为一个大包,因此底层可能的调用是client.send(“123”);
另一种情况是服务器没有及时处理数据:
服务器先后收到三个包"1",“2”,“3”,服务器没有及时处理,这三个包粘成了"123",由于服务器不知道包的边界,因此只能一起取出,而不知道分三次取出。把大包"123"拆成三个小包"1",“2”,"3"的过程就叫拆包。拆包只能依赖应用层来解决;
要是这三个包是有联系的,那么就不需要拆包;
要是这三个包是不相联的,那么就需要拆包了。

粘包的原因:数据流是没有边界的
拆包的关键:为基于数据流的包添加边界:如加入分界符,将包分为数据头和数据体等。

参考:
https://www.cnblogs.com/sui776265233/p/9289858.html
https://blog.csdn.net/ailunlee/article/details/95944377

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值