一.TCP是一种基于流,面向连接,可靠,全双工的协议。数据通过TCP连接以数据流的方式传输,流没有边界限制。和UDP不同,UDP是个基于数据报协议,两段数据间有界限,一次接收一个完整的数据包。
二.在通过TCP传输数据时候可能会出现"粘包"的情况。比如,当客户端连续给服务器端发送两条信息A、B。正常情况下服务器端应该在第一次接收到信息A,第二次接收到信息B。但是此时服务器端第一次没有接收到信息,然而第二次一次性接收到两条消息A,B。这种情况就是"粘包"。
为什么会出现这种情况呢,"粘包"可发生在发送端也可发生在接收端。如可能是接收端接收不及时,首先TCP会把接收到的数据存在自己的缓冲区中。当应用需要处理其他的资源时没有来得及及时去缓冲区提取数据时,此时缓冲区中就会存在多条未提取的数据,所以当应用提取数据时,一次性就拿到了两条。
解决方法:可以通过客户端和服务器端定长的方式解决。规定客户端每次发送固定长度数据,不足以空字符填充,服务器端指定接收固定长度数据。