首页 > 其他 > 详细

TCP粘包和拆包

时间:2020-04-20 17:59:29      阅读:40      评论:0      收藏:0      [点我收藏+]

什么是粘包和拆包?

当发送包同时发送两个数据包时,接收包只收到了一个数据包,其中包含了两个数据包的信息,这种现象为粘包。这种情况下,接收方无法分清两个数据包的界限,很难处理

当发送包同时发送两个数据包时,接收方也收到了两个数据包。但是这两个数据包,一个是不完整的,一个是多出来一块,这种现象为拆包。

为什么会发送粘包和拆包?

  • 要发送的数据包大于TCP发送缓存区剩余大小,就会发生拆包
  • 要发送的数据包大于最大报文长度,就会发生拆包
  • 要发送的数据包小于TCP发送方缓冲区剩余大小,就会发生粘包
  • 接收方的应用未及时读取接收缓存区剩余大小,会发生粘包

如何解决?

消息定长:

发送方将数据包设置为相同的长度,这样接收方每次都将接收缓存区的数据按相应长度进行拆分

设置消息边界:

接收方就可以通过消息边界将数据分隔开

将消息分为消息头和消息体:

在消息头中包含消息长度

TCP粘包和拆包

原文:https://www.cnblogs.com/ashen1999/p/12739131.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!