c语言jt808协议库,部标JTT808协议快速开发包
部标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协议快速开发包相关推荐
- 计算机二级加拼音,计算机二级C语言上机题库超强拼音检索快速找到(多个版本,综合整理,十分强大)最好配合第二套一起使用...
每道题冒号后面的第一个字,若没有冒号则为一个字.如:抽到第三套卷子,每道题后冒号的第一个字为"逆将函"查最后一张表为3,就直接找到第三道题写答案就行!!!两套一起使用!!! 第一套 ...
- 华为短信开发包开发联通sgip1.2接口协议报错
根据联通sgip1.2接口协议,使用华为短信开发包,报错 [Fatal Error] :24:28: An invalid XML character (Unicode: 0xd863) was fo ...
- 【灵动MM32-DMA传输-GPS解算】 移植NMEA协议库解析GGA数据格式
灵动MM32单片机移植NMEA协议库解算GGA数据格式通过串口dma硬件传输 今天使用一款常见的gps模块,goouuu果云GPS模块,这款产品可以说是便宜好用,但是这个原版本的例程我觉得不太行,解析 ...
- 部标808协议 java_基于部标JT/T 808协议及数据格式的GPS服务器 开发
部标808和809的出台,统一了产品的标准,统一了平台与终端之间的通讯协议,对于GPS运营商而言,只要平台支持部标,那可以选择任意一家的GPS车载终端,也不会受厂商的制约,GPS运营商在市场竞争过程中 ...
- 【流媒體】jrtplib—VS2010下RTP开源协议库JRTPLIB3.9.1编译
一.JRTPLIB简介 老外用C++编写的开源RTP协议库,用来进行实时数据传输,可以运行在 Windows.Linux. FreeBSD.Solaris.Unix和VxWorks 等多种操作系统上, ...
- Wix 安装部署教程(十四) -- 多语言安装包之用户许可协议
Wix 安装部署教程(十四) -- 多语言安装包之用户许可协议 原文:Wix 安装部署教程(十四) -- 多语言安装包之用户许可协议 在上一篇中,留下了许可协议的问题,目前已经解决.感谢网友武全的指点 ...
- 【流媒體】jrtplib—VS2010 下RTP开源协议库JRTPLIB3.9.1编译
[流媒體]jrtplib-VS2010下RTP开源协议库JRTPLIB3.9.1编译 SkySeraph Apr 7th 2012 Email:skyseraph00@163.com 一.JRTPLI ...
- python调用库实现返回ping的时延_python网络作业:使用python的socket库实现ICMP协议的ping...
ICMP ping是您遇到过的最常见的网络扫描类型. 打开命令行提示符或终端并输入ping www.google.com非常容易. 为什么要在python中实现? 很多名牌大学喜欢考试用python的 ...
- 从入门到入土:基于Python|ACK|FIN|Null|Xmas|windows|扫描|端口扫描|scapy库编写|icmp协议探测主机|对开放端口和非开放端口完成半连接扫描|全连接扫描|
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...
- 808协议与php通讯,车载808协议对接、交通部794对接、部标808协议809协议对接
1.接口协议栈 接口是指不同网元之间的信息交互方式.既然是信息交互,就应该使用彼此都能看懂的语言,这就是接口协议.接口协议的架构称为协议栈. 根据接口所处位置分为空中接口和地面接口,响应的协议也分为空 ...
最新文章
- 清华首个AI虚拟学生“华智冰”首次露正脸唱歌,颜值与智慧并存
- pycharm Application cannot start in headless mode
- 复杂查询练习_《从零学会SQL:简单查询》第二关 简单查询
- PostgreSQL消息乱码的解决
- C语言指针和数组的天生姻缘
- 实战|QUIC协议助力腾讯业务提速30%
- 凌动服务器系列,凌动也能造服务器?超微又出怪异新品
- Android系统--Binder系统具体框架分析(一)补充
- 订单查询管理系统Silverlight4(预告)
- php strcmp bypass漏洞
- 基于词嵌入技术的微博博文情感分析系统设计实现
- Dijkstra算法python可视化实现
- 戴尔t310服务器装系统步骤,dell笔记本重装系统教程
- H.264中多参考帧预测技术的优化
- 本地nodejs+gulp完成字体转换 ttf转成woff2格式
- matlab 打开access文件,matlab读取Access数据(.mdb文件)
- 猫云bootcdn.cn
- 学计算机打字一段话,如何快速学会电脑打字
- java tea属于红茶吗_武夷岩茶属于红茶吗
- 2021-07-04——在线考试系统设计
热门文章
- P02014171 刘天一 作业
- 记录This request has been blocked; the content must be served over HTTPS.
- 中国知网论文free下载的方法
- 【python技巧】RGB值组合三元色(红绿蓝)
- 牛客网 - 编程初学者入门训练 - 分支控制(BC50~BC77)
- python怎么修改列名_PYTHON:更改列名
- 笔记本电脑频繁自动重启_笔记本电脑经常自动重启怎么办
- 面试计算机有什么优势和不足,面试时如何介绍自己的优缺点
- Barra风险模型简介
- ubuntu 强制删除文件夹