//这是消息头包,消息头包大小是固定的, //每次传输都要先传消息头,在传消息体
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 封包和拆包的思路,目前只是个思路,我这周看有机会实现一下不。