作者:手机用户2702935840 | 来源:互联网 | 2023-09-10 17:56
关于粘包,查了一些资料,还是不太清楚。
我的理解是,A 与 B 的连接建立后,socket 将 tcp 字节流中的非数据字段进行拆解,并将数据部分放入该连接的输入缓冲区。当有多个 A->B 的包发来、且 B 没有对每一条数据及时进行处理时,多条信息就会同时存在于输入缓冲区中,首尾相连。如果数据部分没有分隔符或能够标识数据长度的字段,则很有可能出现无法分割出单条数据边界的情况,从而导致「粘包」。
如果确实会出现「粘包」现象,则解决方法是不是应该是:
- 确保接收方会及时处理发送来的数据,使输入缓冲区中同时只会存在一条发送来的数据;
- 保证发送端的数据中有分隔符或能够标识其长度的字段( 如 HTTP 消息 )。
不知道以上的理解是不是有误?