zoukankan      html  css  js  c++  java
  • socket 粘包问题(转)

    https://www.v2ex.com/t/234785#reply3

    1.

    面向字节流的 IO 都有这个问题。 socket 中 tcp 协议是面向流的协议,发送方发送和接收方的接收并不是一一对应的。所以造成所谓的粘包现象。 
    怎么处理呢? 
    方法 1 :协议包定长。 
    每个发送出去的包长度固定。比如都是 10 个字节。收的时候每次就收 10 个字节,当一个完整的数据包。 
    方法 2 :告知包的长度 
    协议头开始固定长度的字节告知后续包长。收方先收包长字节,知道了后续包长后再收。 
    方法 3 :用一个包体中绝不会出现的结束标志标识包结束。
    

     2.

    我的处理方式根据数据的协议头和协议尾来判断消息,这样就是粘包,也没事,当你接收到协议尾来判断整个消息的完整性。粘包是由于发送缓冲区的大小大于需要发送的数据,数据等待达到缓冲区的大小的时候,数据再发送就造成了粘包,所以为了避免发生粘包,你发送完数据后,清空缓冲区,应该是可以解决,但是最好还是研究研究 tcp ,这样可以避免很多问题。
    
  • 相关阅读:
    OpenLDAP备份和恢复
    OpenLDAP搭建部署
    Python正则表达式
    ansible学习
    Jenkins学习
    docker学习2
    让阿里告诉你, iOS开发者为什么要学 Flutter !
    用UIKit和UIView在视图上执行iOS动画
    iOS开发如何面对疫情过后的面试高峰期 !
    如何写好一个UITableView
  • 原文地址:https://www.cnblogs.com/levy/p/4950948.html
Copyright © 2011-2022 走看看