当前位置:网站首页 > Java教程 > 正文

java dtu 开发教程




使用netty不是一天两天了,但是使用netty和DTU通讯还是第一次,接下来要做DTU的通讯协议,对接工作还没有正式开始,只收到一个简单的DTU协议文档,里面的内容大概是下面表格中的样子。

位数 内容 取值 0 字头 0XCC 1 数据长度 低八位 2 数据长度 高八位 3 类型 0:心跳,1:登录 4 机器编码 0X00-0XFF 5 校验位 前面字节相加的低八位

这里把通讯协议简化了一下,仅剩下心跳和登录,如果有其他参数可以在此基础上进行扩展;从表格中可以看出来,每个字段数据位数还不一样,有的一位,有的两位,数据长度占两位,其他各占用一位。
 
只有这么一个文档,只有这么一丁点信息,其他就什么也不知道了,这可如何是好?不知道从哪里下手,这个疑问多多的项目就这样放了一段时间。

但是也不能总是这样放着呀,如果对接的人来了,我这边什么也没有,一下子也建不起一个项目呀?转念又想,曾经使用 netty + google protobuf 开发过IM项目,也有些相似之处。这个DTU可否使用google protobuf呢?

于是,写了一个简单的客户端,一个服务端,来进行收发信息,google protobuf是通过对象编码成二进制进行数据通讯的,但文档中是字节数组,压根没有对象一说呀?写完了demo,测试一遍,但是和字节数组对应不起来,最后还是删掉了。

在网上找了很多资料,找来找去只找到这么两篇Java采用Netty实现基于DTU的TCP服务器 + 多端口 + 多协议
Java 使用Socket 实现基于DTU的TCP服务器 + 数据解析 + 心跳检测可以参考,试着把上面的demo扒拉了好几遍,通过这两篇文章,可以获得一些信息:
第一,可以使用netty和dtu进行通信,选择使用netty框架没有错;
第二,和dtu对接,接收到的是字节数组,不能使用google的protobuf框架,需要另做处理。

把参考文档中带netty的demo也试着在本地拷贝了一份,大概知道了对接收到的字节数组如何处理,但是demo中只有接收,没有发送,这是不够完美的;这也是个问题,单方面的,不好运行呀。

另外在处理字节数组的时候,在流程上还不是太标准,后面有可能会遇到半包、粘包的问题,这些都是需要面对的问题。结合自己曾经开发过IM的经验,把编解码处理和数据处理也分离出来,半包、粘包的问题一并考过进去,这样后面再完善就方便多了。

下面就开始SpringBoot2.1.4 + netty + DTU的客户端编码,难点就在于字节数组的解码和编码,一进一出,搞定了这一步,其他的业务逻辑就好处理了。这里的客户端编码是为了测试DTU的请求,以便和服务端互动起来,可以进行测试。

第一步,pom文件引入netty架包,就这两个架包足够用的了;

 

第二步,对字节数组的编解码,包括半包、粘包处理;
字节数据解码类ByteArrayDecoder:

 

字节数组编码类ByteArrayEncoder:

 

在编解码的时候,考虑到DTU那边对接的有可能是C语音,C语言和Java的数据类型不一样,所占用的位数也不一样,这个需要保持一致。

第三步,客户端启动类;
客户端启动类NettyClient,这里在头部加了@Component,只要项目一启动就去建立与服务端的链接,建立链接后登录,登录后保持心跳;

 

别忘了application.properties文件中的配置:

 

第四步,handler处理类;
异常处理类ExceptionHandler:

 

登录处理LoginResponseHandler:

 

心跳处理HeartBeatHandler:

 

客户端的核心编码大抵就是这些,看完这些编码是不是有些期待服务端的编码呢,服务端的编码敬请期待下一篇文章。

  • 上一篇: java全屏教程
  • 下一篇: java编程教程文件
  • 版权声明


    相关文章:

  • java全屏教程2025-01-04 12:50:02
  • java教程app版2025-01-04 12:50:02
  • 359集java教程2025-01-04 12:50:02
  • advanced java 教程2025-01-04 12:50:02
  • java160安装教程2025-01-04 12:50:02
  • java编程教程文件2025-01-04 12:50:02
  • java教程fastdfs2025-01-04 12:50:02
  • java的paint菜鸟教程2025-01-04 12:50:02
  • Java像素鸟 教程2025-01-04 12:50:02
  • 刷铁机教程java前期2025-01-04 12:50:02