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 封包和拆包的思路,目前只是个思路,我这周看有机会实现一下不。

相关文章
相关标签/搜索