//這是消息頭包,消息頭包大小是固定的, //每次傳輸都要先傳消息頭,在傳消息體
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 封包和拆包的思路,目前只是個思路,我這周看有機會實現一下不。