Netty和Spring Boot框架实现JT/T 808部标协议的服务端程序分享

createh53周前 (12-18)技术教程18

JT808-Server 是基于Netty和Spring Boot框架,实现了JT/T 808部标协议的服务端程序;

整个项目分为三部分:

1.以framework包为核心的,TCP/IP协议服务端,设计上效仿Spring MVC使用注解标记方法,暴露对外的TCP接口,序列化效仿Hibernate使用注解标注字段的类型和所处的位置。**

核心的注解有三个:

@org.yzh.framework.annotation.Endpoint,标记TCP服务的接入点,相当于SpringMVC中的 @Controller;

@org.yzh.framework.annotation.Mapping,types中定义消息ID,相当于SpringMVC中 @RequestMapping;

@org.yzh.framework.annotation.Property,定义协议中各个字段的类型和占用的字节位置,相当于Hibernate中 @Column,

MessageDecoder、MessageEncoder实现了对@Property的处理, DefaultHandlerMapper(没有Spring的环境中)、SpringHandlerMapper实现了对@Endpoint和@Mapping的处理。

2.以web包为核心的,Http协议服务端。

TerminalController使用SpringMVC开放Restful API,接收对设备发送的请求,收到请求后通过JT808Endpoint中的send方法,将对象序列化为符合808协议的报文通过Netty服务发送至终端设备。

JT808Endpoint通过TCPServer统一接收终端发送的请求,由TCPServerHandler解析报文头得到消息ID, HandlerMapper根据不同的消息ID找到对应的Handler,也就是JT808Endpoint中被@Mapping标注的方法。

3.Test目录下为JT/T 808协议的测试用例和报文解释器

org.yzh.jt808.codec.Elucidator(报文解释器)

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

运行效果如下:

0200002d010000000000007b000000070000000600000001000000020003000400051904061915541206000000000000110100e3040000000bfe

0       0200		消息ID	512
2	002d		消息体属性	45
4	010000000000		终端手机号	010000000000
10	007b		流水号	123
12	0000		消息包总数	0
14	0007		包序号	7

0	00000007		报警标志	7
4	00000006		状态	6
8	00000001		纬度	1
12	00000002		经度	2
16	0003		海拔	3
18	0004		速度	4
20	0005		方向	5
22	190406191554		时间	190406191554
28	1206000000000000110100e3040000000b		位置附加信息	
0	12		参数ID	18
1	06		参数长度	6
2	000000000000		参数值	[B@33afa13b
0	11		参数ID	17
1	01		参数长度	1
2	00		参数值	[B@7a4ccb53
0	e3		参数ID	227
1	04		参数长度	4
2	0000000b		参数值	[B@309e345f[PositionAttribute[id=18,length=6,bytesValue={0,0,0,0,0,0},value=<null>], PositionAttribute[id=17,length=1,bytesValue={0},value=<null>], PositionAttribute[id=227,length=4,bytesValue={0,0,0,11},value=<null>]]

使用发包工具模拟请求

7e0200002d010000000000007b000000070000000600000001000000020003000400051904061915541206000000000000110100e3040000000bfe7e

先转发,后关注,然后信息“jt808”获取免费源码,物联网,车联网定制开发请私信

相关文章

Java泛型T、E、K、V、N、?和Object区别和含义

通常我们在看一些源码时,发现全是T、?,晕乎乎的:sob:。于是,把泛型掌握好十分重要!什么是泛型Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机...

2 分钟快速搞懂,Java 泛型中的通配符 T,E,K,V

Java 泛型中的通配符 T , E , K , V , ? 是什么?经常有同学会分不清楚。本文我们一起来了解下。送:《泛型最全知识导图》、《大厂泛型面试真题26道》,到本篇结尾处获得~1 什么是泛型...

干货丨Java 泛型中super T和extends T的区别

代码中经常发现有List< super T>、Set的声明,是什么意思呢?< super T>表示包括T在内的任何T的父类,< extends T>表示包括T在内的...

PHP 8.0正式发布:支持JIT编译器,性能提升高达3倍

美国时间11月26日,PHP团队宣布PHP 8.0正式GA。PHP 8.0是PHP语言的最新主要版本,带来了许多新特性和优化,包括命名参数(named arguments)、联合类型(union ty...

升级IDEA后Lombok不能用了,如何解决?

今天到工作室比较晚,在电脑前吃着早饭,看到提示IDEA提示升级,寻思已经有好久没有升过级了。一样等着,就升级下吧。升级完毕重启之后,突然发现好多错误,原来的应用也没法启动了。仔细一看报错信息,是由于L...