谈粘包问题

#Ofilm

首先明确一点,粘包这个说法本质上是错误的。因为 TCP 本身是面向流的数据协议,根本不存在 UDP 协议中包的概念。粘包问题本身想要表达的是应用层中的在 TCP 层发送的时候可能被重组。导致可能出现发送端两次 send,但是接收端只有一次 recv。

粘包问题的解决方案有三种:

  1. 在应用层设计固定长度的数据包
  2. 以指定字符(串)为包的结束标志
  3. 设计包头+包体格式