原因:
tcp提供的是一種位元組流服務,沒有訊息保護邊界。
傳送端需要等緩衝區滿才傳送出去,造成粘包
接收方不及時接收緩衝區的包,造成多個包接收
解決方法
一是對於傳送方引起的粘包現象,使用者可通過程式設計設定來避免,tcp提供了強制資料立即傳送的操作指令push,tcp軟體收到該操作指令後,就立即將本段資料傳送出去,而不必等待傳送緩衝區滿;
二是對於接收方引起的粘包,則可通過優化程式設計、精簡接收程序工作量、提高接收程序優先順序等措施,使其及時接收資料,從而盡量避免出現粘包現象;
三是由接收方控制,將一包資料按結構字段,人為控制分多次接收,然後合併,通過這種手段來避免粘包。
以上提到的三種措施,都有其不足之處。
第一種程式設計設定方法雖然可以避免傳送方引起的粘包,但它關閉了優化演算法,降低了網路傳送效率,影響應用程式的效能,一般不建議使用。
第二種方法只能減少出現粘包的可能性,但並不能完全避免粘包,當傳送頻率較高時,或由於網路突發可能使某個時間段資料報到達接收方較快,接收方還是有可能來不及接收,從而導致粘包。
第三種方法雖然避免了粘包,但應用程式的效率較低,對實時應用的場合不適合。
實際使用的方法
(1)傳送固定長度的訊息
(2)把訊息的尺寸與訊息一塊傳送
(3)使用特殊標記來區分訊息間隔
tcp粘包問題
什麼是粘包問題 粘包問題的起因是socket的快取機制。簡而言之 粘包問題就是如何將連續的資料按照不同的資料幀截斷,以及如何處理殘包情況。分割資料需要按需分配。處理殘包也很簡單 等 等它發來下一包資料,不管他發來多少資料,先拿來512,接到上次那512後面。湊成完整的資料幀。當然也有可能你發現這次來...
TCP粘包問題
tcp粘包是指傳送方傳送的若干包資料到接收方接收時粘成一包,從接收緩衝區看,後一包資料的頭緊接著前一包資料的尾。出現粘包現象的原因是多方面的,它既可能由傳送方造成,也可能由接收方造成。傳送方引起的粘包是由tcp協議本身造成的,tcp為提高傳輸效率,傳送方往往要收集到足夠多的資料後才傳送一包資料。若連...
tcp 粘包問題
粘包出現原因 傳送方引起 tcp為提高傳輸效率,傳送方往往要收集到足夠多的資料後才傳送一包資料。若連續幾次傳送的資料都很少,通常tcp會根據優化演算法把這些資料合成一包後一次傳送出去,這樣接收方就收到了粘包資料。接收方引起 由於接收方使用者程序不及時接收資料,從而導致粘包現象。這是因為接收方先把收到...