前言
在前一章记录了如何使用netty作为TCP通信的服务端:点击前往 ,本章记录一下如何解决硬件设备在接收到服务端发送过来的消息时有连包的问题。
问题描述
在通过监测硬件的收包信息时发现偶尔会出现心跳包和指令“粘”在一块的情况,例如指令的发送内容是:EEFF0103GGHH
,心跳包的回复是:EEFF0201GGHH
。
当心跳包返回信息的时候此时正好指令下发,那么设备端就会收到:EEFF0103GGHHEEFF0201GGHH
。
这是由于调用netty的writeAndFlush()
方法时并不是马上将数据发送过去,而将它放在一个缓冲池当中,而由于硬件的一发一收通信机制客户端无法对连包的数据做分割,因此这个问题要由服务端解决。