一. 什么是粘包现象 :
须知: 只有TCP有粘包现象,UDP永远不会粘包. 这是socket收发消息的原理导致的.
对于TCP协议发送端可以是一K一K地发送数据,而接收端的应用程序可以两K两K地提走数据,当然也有可能
一次提走3K或6K数据,或者一次只提走几个字节的数据,也就是说,应用程序所看到的数据是一个整体,或
说是一个流(stream),一条消息有多少字节对应用程序是不可见的,因此TCP协议是面向流的协议,这也是
容易出现粘包问题的原因。
UDP是面向消息的协议,每个UDP段都是一条消息,应用程序必须以消息为单位提取数据,不能一次提取任
意字节的数据,这一点和TCP是很不同的。怎样定义消息呢?可以认为对方一次性write/send的数据为一个
消息,需要明白的是当对方send一条信息的时候,无论底层怎样分段分片,TCP协议层会把构成整条消息
的数据段排序完成后才呈现在内核缓冲区。