消息整体构成
起始标记 |
传输数据头 |
数据体 |
校验数据 |
结束标记 |
0xF0 |
38字节 |
不定长,数据体长度在传输数据头中确定 如果没有数据体,本部分长度为0 |
0/4字节
扫描二维码关注公众号,回复:
8653580 查看本文章
|
0xFF |
消息的总长度:
起始标记(1)+ 协议数据头字节数(38)+ 前置处理头字节数 + 数据体字节数 + 校验数据字节数 + 结束标记(1)
起始标记:用于标识一个消息的开始,固定值:0xF0。该值不正确时,断开连接。
传输数据头:用于描述传输协议控制以及消息的唯一性控制。
数据体:包含传输数据内容,数据体的大小由所传输数据的内容决定。
校验数据:采用CRC32方式对传输的数据体内容进行校验。
数据头定义
消息的唯一标识:由传输数据头中“传输命令编码”、“消息时间戳”、“消息序号”、“设备ID”、“设备分组编码”这五个部分共16个字节确定。当接收方收到这16个字节相同的两个消息时,即可认定是重复消息。
分类 |
字段名 |
长度 |
数据类型 |
描述 |
||
传输 数据头 |
消息总长度 |
4 |
HEX |
消息整体长度 |
||
协议标识 |
4 |
HEX |
0x00000001 |
|||
协议版本号 |
1 |
HEX |
用于确定传输协议版本号:0x01 |
|||
数据格式版本号 |
1 |
HEX |
用于确定数据体中的数据编码格式版本号 :0x01 |
|||
数据传输类型 |
1 |
HEX |
0x00:协议数据;0x01:预留数据; 0x02:交易数据;0x03:业务数据; 0x04:控制数据;0x05:状态数据。 |
|||
预留 |
1 |
HEX |
0xFF |
|||
消息 唯一 标识 |
传输命令编码 |
1 |
HEX |
区分不同的传输命令 |
||
消息时间戳 |
7 |
BCD |
发送请求消息的时间:YYYYMMDDHH24MISS |
|||
消息序列号 |
2 |
HEX |
由消息发起方产生。初值为1,从程序启动后开始递增,到达65535后归1。 |
|||
设备ID |
4 |
1HEX+2BCD+1HEX |
消息发送方的标识 |
|||
设备分组编码 |
2 |
1HEX+1HEX |
消息发送方的分组标识,确认设备分组和组内编码。 |
|||
会话生存周期(改为命令代码) |
2 |
HEX |
本次会话的生存周期。用于确定是否检查超时及超时限制的时间。单位:秒。 |
|||
分包总数 |
1 |
HEX |
|
|||
分包序号 |
1 |
HEX |
当前数据分包序号,如果总包数=1,序号为1;如果总包数>1,分包序号从1开始递增。 |
|||
前置处理标识 |
1 |
HEX |
0x00 |
|||
加密算法 |
1 |
HEX |
0x00 |
|||
加密算法补位长度 |
1 |
HEX |
|
|||
密钥版本 |
1 |
HEX |
加密数据体采用密钥版本号 |
|||
校验码算法 |
1 |
HEX |
目前系统间数据交互时采用0x00。 0:不采用;1:CRC32;其它值无效。CRC32的初值是用0x000000000。 |
|||
预留字段2 |
1 |
HEX |
预留字段 0XFF |
传输命令区分:
协议命令 |
编码 |
命令用途 |
连接请求 |
0x01 |
建立初始合法连接 |
连接确认反馈 |
0x02 |
对连接请求的确认 |
数据传递 |
0x03 |
用于各类数据传输 |
数据传递反馈 |
0xFD |
用于对需要反馈的“数据传递”中指定的内容进行反馈数据传递 |
连接存活确认 |
0x08 |
用于无消息传输时的连接确认 |
连接存活确认反馈 |
0xFC |
仅用于对连接确认的反馈 |
消息正确应答(ACK) |
0xFB |
用于正确接收确认 |
消息错误应答(NACK) |
0x00 |
用于出现接收错误和收到非指定反馈数据时的错误应答 |
业务正确处理完成反馈 |
0xFA |
用于收到数据后业务正确处理完成的反馈 |
业务处理出错反馈 |
0xF9 |
用于收到数据后业务处理出错的反馈 |