JAVA腾晖数据帧对接指南

Java基础

(1)基本数据类型各占多少个字节

数据类型

字节

byte

1

short

2

int

4

long

8

float

4

double

8

char

2

boolean

4

(2)十六进制

十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F表示,其中:A~F相当于十进制的10~15,这些称作十六进制数字。

   参考地址: https://zh.wikipedia.org/wiki/%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6

(3)大小端模式

大端模式:低位(字节/比特)放在高地址中,高位(字节/比特)放在低地址中。

小端模式:低位(字节/比特)放在低地址中,高位(字节/比特)放在高地址中。

一般操作系统都是小端模式;而通讯协议是大端模式。

java和平台无关,默认是大端模式。

    参考地址:https://www.cnblogs.com/justkong/p/8807534.html

自定义协议

(1)对接数据帧封装协议

                                                                            表2.3.1 通用数据帧

帧 头

2byte

帧长度

4byte

帧流水号

2byte

协议版本

1byte

命令

1byte

数据载荷

LEN byte

校验和

1byte

0x5A55

 0x0000

~0xFFFFFFFF

 0x0000

~0xFFFF

0x00~0xFF

0x00-0xFF

——

0x00~0xFF

                                                                             表2.3.2命令子域值

命令值

描述

反馈命令值

0x01

厂商识别码验证请求

0x01

0x03

心跳

0x03

0xFE

获取平台时间

0xFE

0x26

上传车牌识别数据

0x26

注:

1、所有信息传输时,低字节在前,高字节在后。

2、信息的反馈

信息产生端发送数据包给信息处理端后,信息处理端反馈数据包格式和请求帧一致,定义如下:

表2.3.3 反馈数据帧

帧 头

2byte

帧长度

4byte

帧流水号

2byte

协议版本

1byte

命令

1byte

数据载荷

LEN byte

校验和

1byte

0x5A55

 0x0000

~0xFFFFFFFF

 同请求帧流水号

同请求帧协议版本

请求帧命令

——

0x00~0xFF

 

如表2.3.1所示,通信帧结构包括帧头子域、帧长度子域、帧流水号子域、协议版本子域、命令子域、数据载荷子域、校验和子域。其中,帧头为固定的2个字节(0x5A55);帧长度子域4个字节,其值为除帧头外实际数据帧长度,包括帧长度子域本身的长度;帧流水号子域2个字节,信息产生端上发数据是产生的帧流水号约定在1-1024数字范围内,对信息产生端主动上报的数据,信息处理端返回响应帧中的帧流水号同上报帧流水号,同样信息产生端响应平台请求帧的流水号也需相同,该帧流水号区分不同帧;协议版本子域1个字节,表示命令的协议版本;命令子域1个字节,其值定义如表所示;数据载荷子域的字节数LEN是根据不同的数据帧结构变化的,详见具体帧结构;校验和:从帧头0x5A55开始累加到校验和子域之前,包括帧头字节。

(2)文档分析

确定数据值为:帧头固定、帧流水号约到在1-1024之间、协议版本固定01、命令固定,

需要计算的值为:帧长度,数据载荷长度(数据载荷为json字符串,可详情参看河源对接文档)、校验和

需要小端排序字段:帧长度、帧流水号

(3)变量声明

   帧头为2字节,Java基本数据类型应声明为short

   帧长度为4字节,Java基本数据类型应声明为int

   帧流水号为2字节,Java基本数据类型应声明为short

   协议版本为1字节,Java基本数据类型应声明为byte

   命令为1字节,Java基本数据类型byte

   数据载荷为json字符串,Java基本数据类型应声明为String

   校验和为1字节,Java基本数据类型应声明为byte

(4)相关计算

   帧长度计算:

   帧长度是除帧头以为的数据长度,现在只有数据载荷长度未知,那么帧长度4+帧流水号长度2+协议版本长度1+命令长度1+数据载荷长度?+校验和长度1即为帧长度

   帧长度计算公式则变成:9+?数据载荷长度

   数据载荷长度计算:

   数据载荷为String,将String转为byte数组,获取byte数组的长度即为数据载荷长度

JAVA腾晖数据帧对接指南_第1张图片

 

校验和计算:

校验和:从帧头0x5A55开始累加到校验和子域之前,包括帧头字节

(这个校验和计算是请教的硬件部门同事)

就是把帧头到数据载荷放到一个byte数组然后计算长度

JAVA腾晖数据帧对接指南_第2张图片

JAVA腾晖数据帧对接指南_第3张图片

(5)帧长度、帧流水号小端排序计算:

JAVA腾晖数据帧对接指南_第4张图片

数据包组装:

   经和对接方确认tcp调试工具发送的是十六进制的数据包

   所以要将对接的数据转换为十六进制,然后拼接在一起形成一个完整的16进制数据包

JAVA腾晖数据帧对接指南_第5张图片

(6)数据包调试

使用TCP调试助手以十六进制发送数据包,验证能否收到返回,能收到即说明数据包组装无误。

JAVA腾晖数据帧对接指南_第6张图片

你可能感兴趣的:(第三方对接)