什么是粘包?


  粘包是指發送方發送的若干包數據到接收方接收時粘成一包,從接收緩沖區看,后一包數據的頭緊接着前一包數據的尾。只有TCP有粘包現象,UDP不會。

一、socket通信原理

 

二、粘包產生的原因

  1. 當連續發送數據時,由於tcp協議的nagle算法,會將較小的內容拼接成大的內容,一次性發送到服務器端,因此造成粘包

  2. 當發送內容較大時,由於服務器端的recv(buffer_size)方法中的buffer_size較小,不能一次性完全接收全部內容,因此在下一次請求到達時,接收的內容依然是上一次沒有完全接收完的內容,因此造成粘包現象。

三、解決辦法

在每次使用tcp協議發送數據流時,在開頭標記一個數據流長度信息,並固定該報文長度(自定義協議).在客戶端接收數據時先接收該長度字節數據,判斷客戶端發送數據流長度,並只接收該長度字節數據,就可以實現拆包,完美解決tcp粘包問題.

 

 

參考鏈接:淺談tcp粘包問題

              tcp粘包問題原因及解決辦法

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM