谈粘包问题
首先明确一点,粘包这个说法本质上是错误的。因为 TCP 本身是面向流的数据协议,根本不存在 UDP 协议中包的概念。粘包问题本身想要表达的是应用层中的在 TCP 层发送的时候可能被重组。导致可能出现发送端两次 send,但是接收端只有一次 recv。
粘包问题的解决方案有三种:
- 在应用层设计固定长度的数据包
- 以指定字符(串)为包的结束标志
- 设计包头+包体格式
首先明确一点,粘包这个说法本质上是错误的。因为 TCP 本身是面向流的数据协议,根本不存在 UDP 协议中包的概念。粘包问题本身想要表达的是应用层中的在 TCP 层发送的时候可能被重组。导致可能出现发送端两次 send,但是接收端只有一次 recv。
粘包问题的解决方案有三种: