日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TCP通讯处理粘包详解

發布時間:2025/3/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TCP通讯处理粘包详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一般所謂的TCP粘包是在一次接收數據不能完全地體現一個完整的消息數據。TCP通訊為何存在粘包呢?主要原因是TCP是以流的方式來處理數據,再加上網絡上MTU的往往小于在應用處理的消息數據,所以就會引發一次接收的數據無法滿足消息的需要,導致粘包的存在。處理粘包的唯一方法就是制定應用層的數據通訊協議,通過協議來規范現有接收的數據是否滿足消息數據的需要。在應用中處理粘包的基礎方法主要有兩種分別是以4節字描述消息大小或以結束符,實際上也有兩者相結合的如HTTP,redis的通訊協議等。

在平時交流過程發現一些朋友即使做了這些協議的處理,但有時在處理數據的時候也會出現數據不對的情況。這主要原因他們在一些個別情況下沒有處理好。因為當一系列的消息發送過來的時候,對于4節字頭或結束符分布位置都是不確定的。一種簡單的情況就是當前消息處理完成后,緊接著就是處理一下個消息的4節字描述,但在實際情況下當前接收的buffer剩下的內容有可能不足4節字的。如果你想通過通訊的程序來測這情況相對來說觸發的機率性不高,所以對于協議分析的功能最好通過單元測試來模擬。

通過下面這個圖可以更清晰地了解協議標記數據分布的情況?

下面簡單地介紹一下4字節描述大小和結束符和處理方式。

? ? ?4字節大小描述方式

1 public void Import(byte[] data, int start, int count)2 {3 while (count > 0)4 {5 if (!mLoading)6 {7 mCheckSize.Reset();8 mStream.SetLength(0);9 mStream.Position = 0; 10 mLoading = true; 11 } 12 if (mCheckSize.Length == -1) 13 { 14 while (count > 0 && mCheckSize.Length == -1) 15 { 16 mCheckSize.Import(data[start]); 17 start++; 18 count--; 19 } 20 } 21 else 22 { 23 if (OnImport(data, ref start, ref count)) 24 { 25 mLoading = false; 26 if (Receive != null) 27 { 28 mStream.Position = 0; 29 Receive(mStream); 30 } 31 } 32 } 33 } 34 } 35 36 37 public void Import(byte value) 38 { 39 LengthData[mIndex] = value; 40 if (mIndex == 3) 41 { 42 Length = BitConverter.ToInt32(LengthData, 0); 43 if (!LittleEndian) 44 Length = Endian.SwapInt32(Length); 45 } 46 else 47 { 48 mIndex++; 49 } 50 }

? ? ?代碼很簡單如果沒有長度描述的情況就把數據導入到消息長度描述的buffer中,如果當前buffer滿足4位的情況直接得到相應長度。后面的工作就是獲取相應長度的buffer即可。

? ? 結束符方式 ? ??

1 public void Import(byte[] data, int start, int count)2 {3 while (count > 0)4 {5 if (!mLoading)6 {7 mStream.SetLength(0);8 mStream.Position = 0;9 mLoading = true; 10 } 11 if (data[x] == mEof[0]) 12 { 13 start += mEof.Length; 14 count -= mEof.Length; 15 mLoading = false; 16 if (Receive != null) 17 { 18 mStream.Position = 0; 19 Receive(mStream); 20 } 21 } 22 else 23 { 24 mStream.Write(data[start]); 25 start++; 26 count--; 27 } 28 } 29 }

? ? 結束符的處理方式就相對來說簡單多了。

? ? 以上就是兩種TCP數據處理粘包的情況,相關代碼緊供參考。

from:?https://www.cnblogs.com/smark/p/3284756.html?

總結

以上是生活随笔為你收集整理的TCP通讯处理粘包详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美另类在线观看 | 久久精品99国产国产精 | 在线观看国产一区二区 | 日本少妇作爱视频 | 粉嫩久久99精品久久久久久夜 | 欧美高清v| 精品人妻大屁股白浆无码 | 日韩夜夜操| 亚洲人视频在线观看 | 日韩啪啪网 | 日韩性高潮 | 永久免费在线播放 | 天天舔天天爽 | 香蕉网站在线 | 天堂资源在线 | 国产精品久久久久久久久久直播 | 久热精品视频在线观看 | 18无码粉嫩小泬无套在线观看 | 国产femdom调教7777 | 亚洲av中文无码乱人伦在线观看 | 99精品区 | 国产内射合集颜射 | 久色影视 | 一级少妇精品久久久久久久 | 日韩精品一区二区三区视频 | 福利毛片| 欧美激情视频二区 | 中文字幕亚洲视频 | 狠狠干精品 | 亚洲视频一二三四 | 蜜臀av性久久久久蜜臀aⅴ | 天天操综合网 | 欧美一区二区三区影院 | 日本三级免费看 | 成人超碰在线 | 国产网站免费看 | 两性午夜免费视频 | 中文精品久久久久人妻不卡 | av网在线 | 精品国产一区二区三区av性色 | 寂寞人妻瑜伽被教练日 | 精品中文字幕视频 | 综合在线观看 | 超碰在线人| 天天色综合图片 | 欧美一级在线观看视频 | 精品人妻无码专区视频 | 日本三级片在线观看 | 精品人妻人人做人人爽 | 黄色网一级片 | 一级特黄妇女高潮2 | 欧洲三级视频 | 国产精品久久久久久久久毛片 | 91精品国产色综合久久不8 | 特级新鲜大片片 | 99国产超薄肉色丝袜交足 | 国产一级片av | 色婷婷av一区二区三区软件 | 波多野结衣加勒比 | 中文字幕乱码人妻无码久久 | 久久都是精品 | 成人av国产 | 九九色| 亚洲av无码不卡一区二区三区 | 亚洲国产清纯 | 欧美一级色片 | 中文字幕av一区二区三区人妻少妇 | www.色午夜 | 久久嫩草 | 天天摸天天操天天射 | 91精品啪在线观看国产线免费 | 亚洲美女激情视频 | 就要操就要日 | 天天干天天干天天干 | 国产一级免费看 | 日韩欧美精品中文字幕 | 国产精品毛片久久久 | 偷自在线 | 精品美女在线 | 中出一区 | 国产日韩欧美一区 | 国产不卡二区 | 久色电影 | 香蕉视频免费在线观看 | av观看免费在线 | 国产精品理论在线观看 | 激情片网站 | 国产在线观看免费播放 | 911香蕉视频| 91国内揄拍国内精品对白 | 女尊高h男高潮呻吟 | 91久久| 黄色在线观看网站 | 中文字幕精 | 久久爱综合 | 欧美一区在线观看视频 | 麻豆91av| 人av在线 | 91av成人|