每次看到有人说 TCP/IP 协议有粘包问题,我的内心就是崩溃的。
TCP/IP 协议是一个流式协议,也就是一个自来水管协议。
从某些方面说 TCP/IP 协议其实就是 自来水管,对,只是水管而已
当我们调用 write()
方法写入数据的时候,就是把水/油 等东西倒进 水管 的一端。
当我们使用 read()
方法读取数据的时候,就是用杯子在 水管 的另一端 接水
市面上所谓的 粘包 问题,是接水的时候杯子大了或者小了,导致部分水没接到。
因此,最好的实现方式,就是拿一个 桶 来接水,或者拿一个 桶 做 中转,把多出来的水先放到 桶 里
这两种实现方式
-
第一种就是把
read()
读的字节数改成改成更大的,但这样可能会造成多读,可以理解为你拿了一个比较大的水杯** -
第二种就是把
read()
读的数据放到一个 缓冲区Buffer
中,然后每次再按需从缓冲区
读数据
转变下思维,如果认为有 粘包 问题,本来很简单的解决方案会变得超级复杂
目前尚无回复