产生原因:1.接受方未能及时接受缓冲去的数据,多包一起接受,造成接受时粘包
2.发送方需要等待缓冲区flush时发送数据,造成发送时粘包
总结:粘包就是由于TCP是面向流的传输协议,发送和接受都是不定长度,这种传输方式是无保护数据边界的从而造成粘包。
可能出现粘包的情况以及解决办法:
假设发送方粘包:不等缓冲区满就立即发送数据,但是这种方式会降低通行传输速率
假设接受方粘包:通过优化程序逻辑等,接受方粘包是最难解决的,有时候甚至无法优化。
解决办法:1.用开始符和结束符规定好每条数据的长度。2.设置长度,发送时在数据前几位明确此条数据的长度。