一、概念
封包原子
结构定义:数据名称 数据类型、字节长度、数据个数、是否为常量、常量值
数据类型支持long,int,float,double,bool,string等
数据个数>1时,是数组
常量原子
是否为常量 = true,且常量值有意义的封包原子
封包结构
由opcode和若干个封包原子组成
封包结构文本描述
例:OP_TEAM, int,float,bool{1}, string
OP_TEAM, int,float,bool{0}, ushort, [int,float,string]
注意:bool、bool{1} 和 bool{0} 是三个不同的封包原子
[]是数组
分支
两个封包结构的opcode相等,但是封包原子不完全一样,称为 这两个封包结构为该opcode的分支 (分支与逻辑密切相关)
封包
服务器或者客户端接收到的逻辑包
匹配
已知一个封包二进制数据A,用某个封包结构B去解析里面的数据,称为B去匹配A。一般来说,解析过程是顺序下来的,解析伴随着逻辑分析的过程
匹配文本描述
例:OP_TEAM, int(5),float(3.2),bool(1), string(‘aaa’)
OP_TEAM, int(5),float(3,2),bool(0), ushort(2), [0,int(4),float(2.22),string(‘’)], [1,int(78),float(4.22),string(‘aaaa’)]
匹配过程与匹配结果
匹配过程就是顺序拿封包里的指定长度数据去套用封包结构里面的数据定义,产生值。匹配到常量原子时,如果值不等于常量原子,那么匹配失败;如果封包里的数据没有把原子匹配完,或者有多余的数据,也匹配失败。否则匹配成功。
注意:匹配成功不能认为这就是正确的封包,因为匹配产生的各个原子的值是逻辑相关的
二、用途
用于开发过程中需要的发包工具,可先建立一个封包结构知识库,然后根据接收过来的封包与知识库进行匹配识别,再发送特定的测试封包数据。另外也可以在研发过程中作为封包测试排错的机制。