socket在接收數據時,經常會因為網路延遲、緩存區數據處理不及時等原因造成收到的數據是多個包黏在一起的情況。如下圖所示 圖中紅色框部分是通訊的 心跳包 圖中黃色框部分和未框選部分是 兩包 數據包 所以可見此時緩存區裡面同時存在了一個心跳包,兩個數據包 如何分包(此處僅針對幾個完整的數據包在一起的情 ...
socket在接收數據時,經常會因為網路延遲、緩存區數據處理不及時等原因造成收到的數據是多個包黏在一起的情況。如下圖所示
圖中紅色框部分是通訊的 心跳包
圖中黃色框部分和未框選部分是 兩包 數據包
所以可見此時緩存區裡面同時存在了一個心跳包,兩個數據包
如何分包(此處僅針對幾個完整的數據包在一起的情況)
一般在定義通訊協議的時候就會把 前幾位 定義為指示數據包長度的位
例如上圖中紅色框內前四位是 0020 就表示這個數據包長度為 20 位
上圖黃色框內前四位是 0231 就表示這個數據包長度為 231 位
如此一來 分包也就變的簡單了,兩句話
分完第一包再根據第一包的總長度分第二包的總長度。