今天小编给大家带来的是tcp粘包拆包的解决办法,希望能帮助到大家!
工具/原料
PC
方法/步骤
1
首先,大家都知道tcp是无界的数据流,且协议本身无法避免粘包,拆包的发生,那我们只能在应用层数据协议上,加以控制。通常在制定传输数据时,可以使用如下方法:使用带消息头的协议、消息头存储消息开始标识及消息长度信息,服务端获取消息头的时候解析出消息长度,然后向后读取该长度的内容。
2
设置定长消息,服务端每次读取既定长度的内容作为一条完整消息。设置消息边界,服务端从网络流中按消息编辑分离出消息内容。
3
a)先基于第三种方法,假设区分数据边界的标识为换行符'\n'(注意请求数据本身内部不能包含换行符),数据格式为Json,例如下面是一个符合这个规则的请求包。{'type':'message','content':'hello'}\n。
4
注意上面的请求数据末尾有一个换行字符(在PHP中用双引号字符串'\n'表示),代表一个请求的结束。b)基于第一种方法,可以制定,首部固定10个字节长度用来保存整个数据包长度,位数不够补0的数据协议,{'type':'message','content':'hello'}。
5
c)基于第一种方法,可以制定,首部4字节网络字节序unsigned int,标记整个包的长度****{'type':'message','content':'hello all'},其中首部四字节*号代表一个网络字节序的unsigned int数据,为不可见字符,紧接着是Json的数据格式的包体数据。
注意事项
1
网络虽好,但要注意劳逸结合哦!
2
如果是青少年,小编在这里提示大家千万不能沉迷网络!