古詩詞大全網 - 四字成語 - c# socket 客戶端 循環發包 服務器端粘粘包嚴重!求高手給我個解決粘包的例子!

c# socket 客戶端 循環發包 服務器端粘粘包嚴重!求高手給我個解決粘包的例子!

粘包是因為發送太快了,可以通過發送固定長度數據包和在數據包前後加標識以做截取解決。

給妳介紹第壹種方法,發送固定長度的數據包,不足長度的補數,這種方法要固定讀取N長度的數據

整體說按類型分,可以分為頭包,壹般包,尾包

這三種數據包的格式可以這樣包頭+實際數據+檢驗位

1. 頭包,比如可以是A01:LXXXXXXXXXXXC

包頭可以用包頭標識+第幾幀+開始截取標誌+文件長度L構成,例子中是A01:),L為所有數據包加起來的實際數據總長度,XXXXXXXX為實際數據占 N字節(N為固定字節,這個妳自己定義大小),C為校驗位占壹個字節,即所有數據的累加和

2. 壹般包,格式可以為P02:XXXXXXXXXXXXC

類似包頭格式,P為壹般包標識,02表示第二個包

3 包尾,格式可以為D03:XXXXXFFFFFFC

此處XXXXX為實際數據,FFFFF為不足N位的補數,最後壹個包是多長可以通過頭包L跟尾包算出來

各種校驗

1. 收到的數據包要做校驗位驗證,就是格式中的C

2. 每次收到包要判斷是不是期望的包,通過第幾個包來判斷,比如妳要收第4個包了,但妳收到了P05,那就重新請求壹次要收第四個包,或者是直接失敗

3 其他校驗,具體情況具體分析

第二種數據包前後加標識以做截取解決也是類似的,就是在實際數據前後加上壹些供妳判斷的標識,思路已經在這裏了,具體格式要自己定義,因為妳是程序員