808协议

808协议

 

4协议内容

41通信方式

    协议采用的通信方式应符合JT/T 794中的相关规定,通信协议采用TCP或UDP,平台

作为服务器端,终端作为客户端。当数据通信链路异常时,终端可以采用SMS消息方式进

行通信。

4. 2数据类型

协议消息中使用的数据类型见表1:

表1数据类型

数据类型

描述及要求

BYTE

无符号单字节整型(字节,8位)   

WORD

无符号双字节整型(字,16位)     

DWORD

无符号四字节整型(双字,32位)

BYTE[n]

n字节

BCD[n]

8421码,n字节

STRING

GBK编码,采用0终结符,若无数据,则放一个0终结符

4. 3传输规则

协议采用大端模式(big-endian)的网络字节序来传递字和双字。

约定如下:

——字节 (BYTE)的传输约定:按照字节流的方式传输;

——字(WORD)的传输约定:先传递高八位,再传递低八位;

——双字(DWORD)的传输约定:先传递高24位,然后传递高16位,再传递高八位,

最后传递低八位。

4消息的组成

4. 1消息结构

每条消息由标识位、消息头、消息体和校验码组成,消息结构图如图1所示:

标识位

消息头

消息体

校验码

标识位

图1 消息结构体

JT/T 808-2011

4. 4. 2标识位

    采用Ox7e表示,若校验码、消息头以及消息体中出现0x7e,则要进行转义处理,转义

规则定义如下:

0x7e<——>0x7d后紧跟一个0x02;

0x7d<——>0x7d后紧跟一个0x01。

    转义处理过程如下:

        发送消息时:消息封装——>计算并填充校验码——>转义;

        接收消息时:转义还原——>验证校验码——>解析消息。

      示例:

    发送一包内容为0x30 0x7e 0x08 0x7d 0x55的数据包,则经过封装如下:0x7e 0x30 7d 0x02 0x08 0x7d 0x01 0x55 0x7e。

4. 4. 3消息头

消息头内容详见表2:

表2消息头内容

起始字节

字段

数据类型

描述及要求 

0

消息ID

WORD

 

消息体属性

WORD

消息体属性格式结构图见图2

4

终端手机号

BCD[6]

根据安装后终端自身的手机号转换。手机号不足12位,则在前补充数字,大陆手机

号补充数字0港澳台则根据其区号进行位数补充。

10

消息流水号

WORD

按发送顺序从0开始循环累加

12

消息包封装项

 

如果消息体属性中相关标识位确定消息分包处理,则该项有内容,否则无该项

 

消息体属性格式结构图如图2所示:

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

保留

分包

数据加密方式

消息体长度

图2消息体属性格式结构图

    数据加密方式:

    —— bit10-bit12为数据加密标识位;

    ——当此三位都为0,表示消息体不加密;

    ——当第10位为1,表示消息体经过RSA算法加密;

    ——其他保留。

    分包:

    当消息体属性中第13位为1时表示消息体为长消息,进行分包发送处理,具体分包信

息由消息包封装项决定;若第13位为0,则消息头中无消息包封装项字段。

    消息包封装项内容见表3

                                表3消息包封装项内容

JT/T 808-2011

起始字节

字段

数据类型

描述及要求

0

消息总包数

WORD

该消息分包后的总包数

2

包序号

WORD

从1开始

 

4. 4. 4校验码

校验码指从消息头开始,同后一字节异或,直到校验码前一个字节,占用一个字节。

### JT808协议详解 JT808协议是中国交通运输行业标准之一,主要用于车载终端与监控平台之间的通信。该协议定义了消息格式、传输规则以及校验机制等内容,广泛应用于车辆定位、轨迹追踪等领域。 #### 1. 协议基础 JT808协议的核心在于其消息结构的设计。每条消息由多个字段组成,包括消息头、消息体和校验码等部分。具体如下: - **消息头**:包含消息ID、终端手机号、消息流水号等基本信息[^1]。 - **消息体**:根据不同的消息类型,携带相应的数据内容。例如位置信息上报、心跳包等。 - **校验码**:通过累加消息体中所有字节并取低8位的方式生成,用于验证消息完整性[^2]。 #### 2. 编/解码器实现 为了支持JT808协议的消息处理,在实际开发中通常会基于Netty框架构建编/解码器。以下是`ProtocolCodec`接口的一个典型实现示例: ```java @Override public ProtocolSupport support() { return new ProtocolSupport(TransportProtocol.TCP) .id("JT/T808-tcp-codec") .name("JT/T808-tcp协议") .description("JT/T808-2019版") .feature(new ProtocolFeature() .remoteUpgrade(false) .keepOnline(true) .keepOnlineTimeoutSeconds(360)); } ``` 上述代码片段展示了如何配置协议的支持属性,如传输方式(TCP)、协议唯一标识符及其功能特性等。 #### 3. 数据类型的映射 在Java环境中解析JT808协议时,需注意不同数据类型的转换关系。常见的映射规则包括但不限于以下几种: | JT/L808描述 | JAVA描述 | |-------------|----------------| | BYTE | Byte | | WORD | Short | | DWORD | Integer | | BYTE[n] | Byte[] | 这些映射有助于开发者更直观地理解和操作协议中的原始数据[^4]。 #### 4. 车牌编码 车牌号码按照GBK编码方式进行存储,例如“粤B12345”的GBK编码形式为`E7 B2 A4 42 50 39 34 4A 35`[^5]。 --- ### 示例代码:校验码计算 下面提供一段简单的C语言代码来演示如何依据JT808协议计算校验码: ```c unsigned char calculate_checksum(unsigned char *data, int length) { unsigned char checksum = 0; for (int i = 0; i < length; ++i) { checksum += data[i]; if (checksum > 255) { checksum -= 256; } } return checksum; } ``` 此函数接收一个字节数组及其长度作为输入参数,并返回对应的校验值。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值