什么是粘包?
粘包 就是 接收方一次性读取了发送方多次发送的数据包。
造成粘包有以下两个原因:
1、 由于TCP是面向流的协议,数据与数据之间是没有界限。接收方可能同时读取多个数据包读取
2、 当传输的数据比TCP头部的字节还少时,大量的发送这种数据包,会加重网络的负担。所以引入了Nigle算法,将连续的多个小分组拼接到一个TCP报文中发送。这也会造成粘包。
粘包的解决方案
第一种粘包:
在要发送的数据头部固定n个字节来标识要发送的数据的长度,在读取的时候,首先读取长度,然后根据长度再来读取对应的数据。
第二种粘包:
将Nigle算法关闭,然后按照第一种粘包的解决方案来执行