C# Socket 封包 拆包 ProtoBuf 的使用

//這是消息頭包,消息頭包大小是固定的, //每次傳輸都要先傳消息頭,在傳消息體
 enum EnumMsgType:消息類型 long PackgeSize:包大小 long TotalPackage:全部包總數 long PackageIndex:當前包索引 //消息體包
byte[] Data=null;不固定大小的包,大小在消息頭包

數據格式 用 ProtoBuf  比json轉爲byte後都要小。使用例子json

https://blog.csdn.net/liehuo123/article/details/78408876spa

包頭 包體 都轉換爲這個格式。.net

發送數據時必須 包頭|包體|包頭|包體的發送code

 

主要是數據接受,個人思路是這樣blog

咱們能夠在開發前本身算出 本身定義的包頭大小,之後這個包頭的大小都不會變化了。索引

首次接受,先按包頭大小接受一次,可否經過ProtoBuf 轉爲包頭實體,若是異常,說明該傳包頭的地方沒傳對,直接拋出異常,不然 獲得包頭實體開發

而後判斷消息類型,假如是文件,我我的規定 該包頭的首個包體是文件名,獲得文件名class

咱們能夠根據消息類型,封裝不一樣的處理接受數據的方法,每次 接受某種消息類型的首個包頭後,就在接下來用封裝的方法完成這個消息餘下的數據包括包頭和包體。方法

接下來 while(packageIndex<TotalPackage){數據

 //包頭實體接受到

//包體數據接受到

//更新packageIndex爲當前包頭的index

}

以上就是我本身的基於Socket 封包和拆包的思路,目前只是個思路,我這周看有機會實現一下不。

相關文章
相關標籤/搜索