当前位置: 首页 > Web前端 > vue.js

一个TCP长连接设备管理后台项目(三)

时间:2023-03-31 20:22:59 vue.js

上一篇:一个TCP长连接设备管理后台项目(一)一个TCP长连接设备管理后台项目(二)Github仓库地址TCP协议集成JTT808协议前面简单介绍了基于golang的net库,用于TCP通信。现在我们需要将现有的协议集成到其中。业界车载终端一般接入的是交通部的JTT808协议,而我们这里要实现的是JTT808-2019版本。消息结构标识位消息头消息体验证码标识位0x7e0x7e标识位应该用0x7e表示。如果验证码、消息头、消息体中出现0x7e、0x7d,则需要进行转义处理。转义规则定义如下:首先将0x7d转义为固定的两字节数据:0x7d0x01;然后将0x7e转义,转换成固定的两字节数据:0x7d0x02。转义处理过程如下:发送消息时:先封装消息,然后计算填充校验码,最后进行转账处理;收到消息时:先对消息进行转义和恢复,然后校验校验码,最后解析消息。例:发送一个内容为0x300x7e0x080x7d0x55的数据包,封装为:0x7e0x300x7d0x020x080x7d0x010x550x7e。注意:多字节按大端顺序传输。报文头首字节字段的数据类型描述和要求。下一次key修改递增,初始版本为15终端手机号BCD[10]安装后根据终端自身手机号转换。手机号不足,在前面加号。15消息序号WORD按发送顺序从0开始,循环累加17消息包封装选项——如果消息体属性中的相关标识位决定消息分包处理,则此项有内容,否则无消息bodyattribute格式:15141312~109~0预留版本标识包数据加密方式报文体长度注意版本标识位固定为1加密方式如下:bit10~bit12为数据加密标识位;当这三位为0时,标识报文体未加密;当第10位为1时,表示消息体采用RSA算法加密;其他位是保留位。消息分包按如下要求处理:当消息体属性中第13位为1时,表示消息体为长消息,进行分包处理,具体分包消息由消息确定包裹物品;如果第13位为0,则消息头中没有消息包封装项字段。消息包封装项内容:起始字节字段数据内容说明及要求0消息包总数WORD消息分包后的包总数2包序号WORD从1校验码开始校验码的计算规则应该开始从消息头的第一个字节开始,与下一个字节进行异或运算,直到消息体的最后一个字节结束;校验码的长度是一个字节。消息体消息体只需要执行以下命令:命令消息ID描述终端总响应0x0001终端总响应平台总响应0x8001平台总响应终端心跳0x0002消息体为空,响应为总响应终端注册0x0100终端注册响应0x8100终端认证0x0102response为通用响应位置信息0x0200response为通用响应数据格式终端通用响应:起始字节字段数据内容说明及要求0响应序列号WORD报文分包后的包总数2responseIDWORD对应ID4结果平台消息BYTE0:成功/确认;1:失败;2消息错误;3:不支持平台通用响应:起始字节字段的数据内容说明和终端报文序号对应的WORD对应的响应序号为02响应ID4结果IDWORDBYTE0对应的终端信息:成功/确认;1:失败;2消息错误;3:不支持;4:报警处理确认SerialnumberWORD对应终端消息序号2responseIDWORD对应终端消息ID4ResultBYTE0:成功/确认;1:失败;2消息错误;3:不支持;4:报警处理确认终端注册响应:startByte字段数据内容说明及要求0响应序号WORD对应终端注册报文序号2ResultBYTE0:成功;1:车辆已经上牌;2:数据库中没有该车辆;3终端已注册;4数据库没有该终端3注册结果成功时只有该字段认证:起始字节字段数据内容说明要求0认证码长度BYTE---n结果STRINGn为认证码长度n+1终端IMEIBYTE[15]---n+16软件版本号BYTE[20]厂家定义的版本号,位数不足则补0x00,n为验证码长度,以上为需要实现的808协议内容。从协议中可以看出。对于协议实现,为了方便后续扩展,我们需要将其分为两个基本部分:协议解析和协议处理。