部标808协议快速开发包

项目介绍

基于Netty,实现JT/T 808部标协议的消息分发,与编码解码;

与Spring解耦合,协议编码解码和Netty服务均可独立运行(Android客户端同样适用);

SpringBoot 仅负责将协议暴露至Web接口,目的是方便测试,且为二次开发提供样例;

最简洁、清爽、易用的部标开发框架。

问题交流群:[906230542]

主要特性

代码足够精简,便于二次开发;

致敬Spring、Hibernate设计理念,熟悉Web开发的同学上手极快;

使用注解描述协议,告别繁琐的封包、解包;

支持2013、2019部标协议版本,支持分包请求;

支持异步批量处理,显著提升Netty和MySQL入库性能;

提供报文解释器(解析过程分析工具),编码解码不再抓瞎;

全覆盖的测试用例,稳定发版。

代码仓库

下载方式

Gitee下载命令:git clone https://gitee.com/yezhihao/jt808-server -b master

Github下载命令:git clone https://github.com/yezhihao/jt808-server -b master

使用说明

项目分为四部分:

1.framework,核心模块,不推荐修改,有BUG或扩展的需求,建议提交issues或联系作者

└── framework

├── codec 编码解码

├── mvc 消息分发、处理

├── orm 消息元数据的描述

├── session 消息和会话的管理

└── netty 网络通信

注解:

@Endpoint,服务接入点,等价SpringMVC的 @Controller;

@Mapping,定义消息ID,等价SpringMVC中 @RequestMapping;

@AsyncBatch, 异步批量消息,对于并发较高的消息,如0x0200(位置信息汇报),使用该注解,显著提升Netty和MySQL入库性能。

@Message,协议类型,等价Hibernate的 @Table;

@Field,属性定义,等价Hibernate的 @Column;

@Fs,多版本协议支持

2.protocol 部标协议定义,不推荐做大量修改

└── protocol

├── basics 部标协议通用消息头,以及公共的消息定义

├── codec 部标编码解码工具

├── commons 部标协议ID,工具类等

├── t808 JT/T808协议定义(已完成)

└── t1078 JT/T1078协议(待补充)

消息定义样例:

@Message(JT808.定位数据批量上传)

public class T0704 extends AbstractMessage {

private Integer total;

private Integer type;

private List items;

@Field(index = 0, type = DataType.WORD, desc = "数据项个数")

public Integer getTotal() { return total; }

public void setTotal(Integer total) { this.total = total; }

@Field(index = 2, type = DataType.BYTE, desc = "位置数据类型 0:正常位置批量汇报,1:盲区补报")

public Integer getType() { return type; }

public void setType(Integer type) { this.type = type; }

@Field(index = 3, type = DataType.LIST, desc = "位置汇报数据项")

public List getItems() { return items; }

public void setItems(List items) { this.items = items; this.total = items.size(); }

}

3.web 开箱即用的Demo,业务需求在这个包下开发,可随意修改

└── web

├── config spring 相关配置

├── component.mybatis 附赠极简的mybatis分页插件:D

├── endpoint 808消息入口,所有netty进入的请求都会根据@Mapping转发到此

└── controller service mapper ... 不再赘述

消息接入:

@Endpoint

public class JT808Endpoint {

@Autowired

private LocationService locationService;

@Autowired

private DeviceService deviceService;

//异步批量处理 队列大小20000 最大累积200处理一次 最大等待时间5秒

@AsyncBatch(capacity = 20000, maxElements = 200, maxWait = 5000)

@Mapping(types = 位置信息汇报, desc = "位置信息汇报")

public void 位置信息汇报(List list) {

locationService.batchInsert(list);

}

@Async

@Mapping(types = 终端注册, desc = "终端注册")

public T8100 register(T0100 message, Session session) {

Header header = message.getHeader();

T8100 result = new T8100(session.nextSerialNo(), header.getMobileNo());

result.setSerialNo(header.getSerialNo());

String token = deviceService.register(message);

if (token != null) {

session.register(header);

result.setResultCode(T8100.Success);

result.setToken(token);

} else {

result.setResultCode(T8100.NotFoundTerminal);

}

return result;

}

}

消息下发:

@Controller

@RestController("terminal")

public class TerminalController {

private MessageManager messageManager = MessageManager.getInstance();

@ApiOperation("设置终端参数")

@PostMapping("{terminalId}/parameters")

public T0001 updateParameters(@PathVariable("terminalId") String terminalId, @RequestBody List parameters) {

T8103 request = new T8103(terminalId);

request.setItems(parameters);

T0001 response = messageManager.request(request, T0001.class);

return response;

}

}

已集成Swagger文档,启动后可访问如下地址

4.test 808协议全覆盖的测试用例,以及报文解释器

QuickStart 不依赖Spring的启动,可用于Android客户端

Beans 测试数据

TestBeans 消息对象的封包解包

TestHex 原始报文测试

Elucidator 报文解释器 - 解码

DarkRepulsor 报文解释器 - 编码

分析报文内每个属性所处的位置以及转换后的值,以便查询报文解析出错的原因

Elucidator 运行效果如下:

020000610123456789017fff000004000000080006eeb6ad02633df701380003006320070719235901040000000b02020016030200210402002c05033737371105420000004212064d0000004d4d1307000000580058582504000000632a02000a2b040000001430011e3101286b

00200消息ID512

20061消息体属性97

4012345678901终端手机号12345678901

107fff流水号32767

120000消息包总数0

140400包序号1024

000000400报警标志1024

400000800状态2048

806eeb6ad纬度116307629

1202633df7经度40058359

160138海拔312

180003速度3

200063方向99

22200707192359时间200707192359

001附加信息ID1

104附加信息长度4

20000000b参数值[B@2a798d51

002附加信息ID2

102附加信息长度2

20016参数值[B@6d763516

003附加信息ID3

102附加信息长度2

20021参数值[B@52bf72b5

004附加信息ID4

102附加信息长度2

2002c参数值[B@37afeb11

005附加信息ID5

103附加信息长度3

2373737参数值[B@515aebb0

011附加信息ID17

105附加信息长度5

24200000042参数值[B@dd8ba08

012附加信息ID18

106附加信息长度6

24d0000004d4d参数值[B@245b4bdc

013附加信息ID19

107附加信息长度7

200000058005858参数值[B@6c64cb25

025附加信息ID37

104附加信息长度4

200000063参数值[B@6ae5aa72

02a附加信息ID42

102附加信息长度2

2000a参数值[B@222545dc

02b附加信息ID43

104附加信息长度4

200000014参数值[B@5c5eefef

030附加信息ID48

101附加信息长度1

21e参数值[B@16293aa2

031附加信息ID49

101附加信息长度1

228参数值[B@5158b42f

2801040000000b02020016030200210402002c05033737371105420000004212064d0000004d4d1307000000580058582504000000632a02000a2b040000001430011e310128位置附加信息[BytesAttribute[id=1,length=4,value={0,0,0,11}], BytesAttribute[id=2,length=2,value={0,22}], BytesAttribute[id=3,length=2,value={0,33}], BytesAttribute[id=4,length=2,value={0,44}], BytesAttribute[id=5,length=3,value={55,55,55}], BytesAttribute[id=17,length=5,value={66,0,0,0,66}], BytesAttribute[id=18,length=6,value={77,0,0,0,77,77}], BytesAttribute[id=19,length=7,value={0,0,0,88,0,88,88}], BytesAttribute[id=37,length=4,value={0,0,0,99}], BytesAttribute[id=42,length=2,value={0,10}], BytesAttribute[id=43,length=4,value={0,0,0,20}], BytesAttribute[id=48,length=1,value={30}], BytesAttribute[id=49,length=1,value={40}]]

使用发包工具模拟请求

7e020000610123456789017fff000004000000080006eeb6ad02633df701380003006320070719235901040000000b02020016030200210402002c05033737371105420000004212064d0000004d4d1307000000580058582504000000632a02000a2b040000001430011e3101286b7e

项目会不定期进行更新,建议star和watch一份,您的支持是我最大的动力。

如有任何疑问或者BUG,请联系我,非常感谢。

技术交流QQ群:[906230542]

c语言jt808协议库,部标JTT808协议快速开发包相关推荐

  1. 计算机二级加拼音,计算机二级C语言上机题库超强拼音检索快速找到(多个版本,综合整理,十分强大)最好配合第二套一起使用...

    每道题冒号后面的第一个字,若没有冒号则为一个字.如:抽到第三套卷子,每道题后冒号的第一个字为"逆将函"查最后一张表为3,就直接找到第三道题写答案就行!!!两套一起使用!!! 第一套 ...

  2. 华为短信开发包开发联通sgip1.2接口协议报错

    根据联通sgip1.2接口协议,使用华为短信开发包,报错 [Fatal Error] :24:28: An invalid XML character (Unicode: 0xd863) was fo ...

  3. 【灵动MM32-DMA传输-GPS解算】 移植NMEA协议库解析GGA数据格式

    灵动MM32单片机移植NMEA协议库解算GGA数据格式通过串口dma硬件传输 今天使用一款常见的gps模块,goouuu果云GPS模块,这款产品可以说是便宜好用,但是这个原版本的例程我觉得不太行,解析 ...

  4. 部标808协议 java_基于部标JT/T 808协议及数据格式的GPS服务器 开发

    部标808和809的出台,统一了产品的标准,统一了平台与终端之间的通讯协议,对于GPS运营商而言,只要平台支持部标,那可以选择任意一家的GPS车载终端,也不会受厂商的制约,GPS运营商在市场竞争过程中 ...

  5. 【流媒體】jrtplib—VS2010下RTP开源协议库JRTPLIB3.9.1编译

    一.JRTPLIB简介 老外用C++编写的开源RTP协议库,用来进行实时数据传输,可以运行在 Windows.Linux. FreeBSD.Solaris.Unix和VxWorks 等多种操作系统上, ...

  6. Wix 安装部署教程(十四) -- 多语言安装包之用户许可协议

    Wix 安装部署教程(十四) -- 多语言安装包之用户许可协议 原文:Wix 安装部署教程(十四) -- 多语言安装包之用户许可协议 在上一篇中,留下了许可协议的问题,目前已经解决.感谢网友武全的指点 ...

  7. 【流媒體】jrtplib—VS2010 下RTP开源协议库JRTPLIB3.9.1编译

    [流媒體]jrtplib-VS2010下RTP开源协议库JRTPLIB3.9.1编译 SkySeraph Apr 7th 2012 Email:skyseraph00@163.com 一.JRTPLI ...

  8. python调用库实现返回ping的时延_python网络作业:使用python的socket库实现ICMP协议的ping...

    ICMP ping是您遇到过的最常见的网络扫描类型. 打开命令行提示符或终端并输入ping www.google.com非常容易. 为什么要在python中实现? 很多名牌大学喜欢考试用python的 ...

  9. 从入门到入土:基于Python|ACK|FIN|Null|Xmas|windows|扫描|端口扫描|scapy库编写|icmp协议探测主机|对开放端口和非开放端口完成半连接扫描|全连接扫描|

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  10. 808协议与php通讯,车载808协议对接、交通部794对接、部标808协议809协议对接

    1.接口协议栈 接口是指不同网元之间的信息交互方式.既然是信息交互,就应该使用彼此都能看懂的语言,这就是接口协议.接口协议的架构称为协议栈. 根据接口所处位置分为空中接口和地面接口,响应的协议也分为空 ...

最新文章

  1. 清华首个AI虚拟学生“华智冰”首次露正脸唱歌,颜值与智慧并存
  2. pycharm Application cannot start in headless mode
  3. 复杂查询练习_《从零学会SQL:简单查询》第二关 简单查询
  4. PostgreSQL消息乱码的解决
  5. C语言指针和数组的天生姻缘
  6. 实战|QUIC协议助力腾讯业务提速30%
  7. 凌动服务器系列,凌动也能造服务器?超微又出怪异新品
  8. Android系统--Binder系统具体框架分析(一)补充
  9. 订单查询管理系统Silverlight4(预告)
  10. php strcmp bypass漏洞
  11. 基于词嵌入技术的微博博文情感分析系统设计实现
  12. Dijkstra算法python可视化实现
  13. 戴尔t310服务器装系统步骤,dell笔记本重装系统教程
  14. H.264中多参考帧预测技术的优化
  15. 本地nodejs+gulp完成字体转换 ttf转成woff2格式
  16. matlab 打开access文件,matlab读取Access数据(.mdb文件)
  17. 猫云bootcdn.cn
  18. 学计算机打字一段话,如何快速学会电脑打字
  19. java tea属于红茶吗_武夷岩茶属于红茶吗
  20. 2021-07-04——在线考试系统设计

热门文章

  1. P02014171 刘天一 作业
  2. 记录This request has been blocked; the content must be served over HTTPS.
  3. 中国知网论文free下载的方法
  4. 【python技巧】RGB值组合三元色(红绿蓝)
  5. 牛客网 - 编程初学者入门训练 - 分支控制(BC50~BC77)
  6. python怎么修改列名_PYTHON:更改列名
  7. 笔记本电脑频繁自动重启_笔记本电脑经常自动重启怎么办
  8. 面试计算机有什么优势和不足,面试时如何介绍自己的优缺点
  9. Barra风险模型简介
  10. ubuntu 强制删除文件夹