網路程式設計 粘包

2022-08-29 13:06:30 字數 451 閱讀 7404

粘包問題的產生

tcp流式協議

基於資料流的協議

接收方產生粘包問題

1.接收方不清楚資料有多長只接收了資料的一部分

2.接收方多讀取了資料

傳送方產生的粘包問題

作業系統沒有及時傳送前一次的資料,導致兩次資料粘在一起

粘包問題的根本原因是接收方不清楚資料的長度

tcp nigle 優化機制

如果多次傳送資料的資料量小並且時間間隔短,會把這一堆資料集在一起一次性傳送,目的是為了降低網路傳輸次數

解決粘包

核心思路是先通知接收方,要傳送的資料的長度,在傳送真實的資料

udp基於資料報的傳輸協議,不會發生粘包問題

因為資料是以報文的形式存在,每次傳送都是以資料報的形式

對方接收的也是乙個個資料報

struct模組

將乙個資料處理成固定長度的二進位制

網路程式設計的粘包

客戶端粘包 傳送端需要等緩衝區滿才傳送出去,造成粘包 傳送資料時間間隔很短,資料量很小,tcp優化演算法會當做乙個包發出去,產生粘包 服務端粘包 接收方不及時接收緩衝區的包,造成多個包接收 客戶端傳送了一段資料,服務端只收了一小部分,服務端下次再收的時候還是從緩衝區拿上次遺留的資料,產生粘包 所謂粘...

python 網路程式設計 02 粘包

思考 什麼是粘包?同時執行多條命令之後,得到的結果很可能只有一部分,在執行其他命令的時候又接收到之前執行的另外一部分結果,這種顯現就是粘包。例如 send b 123 send b abc recv 4 1234 應該接收123 recv 4 bc 應該接收abc或者傳送的資料量大,一次沒有接收完,...

python網路程式設計之粘包

一 什麼是粘包 須知 只有tcp有粘包現象,udp永遠不會粘包 粘包不一定會發生 如果發生了 1.可能是在客戶端已經粘了 2.客戶端沒有粘,可能是在服務端粘了 首先需要掌握乙個socket收發訊息的原理 應用程式所看到的資料是乙個整體,或說是乙個流 stream 一條訊息有多少位元組對應用程式是不可...