粘包是指發送方發送的若干包數據到接收方接收時粘成一包,從接收緩沖區看,后一包數據的頭緊接着前一包數據的尾。只有TCP有粘包現象,UDP不會。
一、socket通信原理
二、粘包產生的原因
-
當連續發送數據時,由於tcp協議的nagle算法,會將較小的內容拼接成大的內容,一次性發送到服務器端,因此造成粘包
-
當發送內容較大時,由於服務器端的recv(buffer_size)方法中的buffer_size較小,不能一次性完全接收全部內容,因此在下一次請求到達時,接收的內容依然是上一次沒有完全接收完的內容,因此造成粘包現象。
三、解決辦法
在每次使用tcp協議發送數據流時,在開頭標記一個數據流長度信息,並固定該報文長度(自定義協議).在客戶端接收數據時先接收該長度字節數據,判斷客戶端發送數據流長度,並只接收該長度字節數據,就可以實現拆包,完美解決tcp粘包問題.
參考鏈接:淺談tcp粘包問題