游戏一般是自定义协议,包头的设计要从可用性和防外挂考虑。
数据包头信息
struct msg_head{
uint16 reserve;//保留字节(第15位是可用来标识是否压缩(0x4000))
uint16 len;//长度(从消息头标识开始计算)
uint16 base_flag;//包头标识(某个固定的值,用于查找包头的,数据包是可以写入到文件的,用于查询和重现现场)
uint16 base_sum;//交验码,这个的校验算法是可以自己定义的
uint16 base_index;//编号 这个是用于检查包的顺序的,从0开始到65535就又从0开始
uint8 first;//一级指令
uint8 second;//二级指令
};
uint32 reserve 保留字节:
可用来标识是否压缩(等)
uint32 len 包体的长度:
是从数据包头之后开始的数据包体的长度
base_flag包头标识:
如0xab87,这个可以自己写个适用的,用于查找包头的,数据包是可以写入到文件的,用于查询和重现现场
base_sum 交验码:
这个的校验算法是可以自己定义的
可以是数据包体的所有字节的和(或者位于),再位与一个特殊的字节(或和),再位与特殊的key(或和)
base_index 编号:
这个是用于检查包的顺序的,从0开始到65535就又从0开始
first 一级系统指令,
second 二级系统指令