一 什麼是粘包現象
須知:只有tcp有粘包現象,udp永遠不會粘包
粘包不一定會發生,如果發生了:1.可能是在客戶端已經粘了,2.客戶端沒有粘,可能是在服務端粘了
粘包現象:tcp粘包是指傳送方傳送的若干包資料到接收方接收時粘成一包,從接收緩衝區看,後一包資料的頭緊接著前一包資料的尾。
成因:所謂粘包問題主要還是因為接收方不知道訊息之間的界限,不知道一次性提取多少位元組的資料所造成的,應用程式所看到的資料是乙個整體,或說是乙個流(stream),一條訊息有多少位元組對應用程式是不可見的,因此tcp協議是面向流的協議,這也是容易出現粘包問題的原因。(因為tcp是流式協議,不知道啥時候開始,啥時候結束)。而udp是面向訊息的協議,每個udp段都是一條訊息,應用程式必須以訊息為單位提取資料,不能一次提取任意位元組的資料,這一點和tcp是很不同的。怎樣定義訊息呢?可以認為對方一次性write/send的資料為乙個訊息,需要明白的是當對方send一條資訊的時候,無論底層怎樣分段分片,tcp協議層會把構成整條訊息的資料段排序完成後才呈現在核心緩衝區。
二 發生粘包的兩種情況
三 解決粘包現象的辦法
解決粘包現象
簡單版 服務端 usr bin env python coding utf 8 author mr.yang import socket import struct import subprocess phone socket.socket socket.af inet,socket.sock st...
mina 粘包無法解決的解決辦法
如果你遇到 粘包 問題,實際上可能不是粘包問題。使用mina的時候鋪天蓋地的都說要加上 executorfilter fc.addlast executor new executorfilter executors.newcachedthreadpool 我在測試的時候發現很容易出現粘包問題,ok ...
TCP粘包原因及解決辦法
粘包 多個資料報被連續儲存於連續的快取中,在對資料報進行讀取時由於無法確定發生方的傳送邊界,而採用某一估測值大小來進行資料讀出,若雙方的size不一致時就會使指傳送方傳送的若干包資料到接收方接收時粘成一包,從接收緩衝區看,後一包資料的頭緊接著前一包資料的尾。比如說 傳送方傳送了兩個資料,接收方一次收...