字节流
面向字节流:提供字节流传输服务 --- 有序、可靠、基于连接,双向的一种以字节的单位进行传输的方式
面向数据报:数据传输是整条收发,按条交付
面向字节流:tcp在缓冲区中取出合适大小的数据进行发送,接收方接收数据的最小单位是1字节
- 优势:传输比较灵活
- 劣势:会存在黏包问题
黏包问题
黏包 — 有可能将多条数据当成一条数据进行处理
本质:tcp在传输层对应用数据边界不敏感(不关注应用层数据边界)
因此需要程序猿在应用层进行数据的边界管理
编程影响:上层可能会将多条数据当做一条数据处理。
解决方案:
- 特殊字符间隔: 使用此方法则必须对数据中的特殊字符进行转义,否则会造成二义
- 数据定长:规定固定长度的数据,实际数据少的则需要进行补位
- 在应用层头部定义数据长度(例如http协议,udp协议,先取头部,再根据头部中的数据长度取出数据)
显然我可以发现第三种是最靠谱的方法。
注意:UDP协议是不存在黏包问题,不要被迷惑~