如何处理网络延时造成的丢包,粘包,半包问题

解决方案1

在数据包中添加长度的方式,即在数据包中的固定位置封装数据包的长度信息,服务器接收到数据后,先是解析包长度,然后根据包长度截取数据包,但是有个小问题就是如果客户端第一个数据包数据长度封装的有错误,那么很可能就会导致后面接收到的所有数据包都解析出错,需要开发者对接收到的有问题的包进行人为的丢弃处理(客户端有自动重发机制,故而在应用层不会导致数据的不完整性)

解决方案2

可在数据尾部添加结尾符,标志一个数据包的结束
即我们在封装要传输的数据包的时候,采用固定的符号作为结尾符(数据中不能含结尾符),这样我们接收到数据后,如果出现结尾标识,即人为的将粘包分开,如果一个包中没有出现结尾符,认为出现了分包,则等待下个包中出现后 组合成一个完整的数据包,这种方式适合于文本传输的数据,如采用/r/n之类的分隔符
 

猜你喜欢

转载自blog.csdn.net/qq_42485607/article/details/82191532
今日推荐