如何在单个 Java class 中将 Traccar 服务器连接复制到设备(TCP 的 castel 协议)? (连接、断开编码和解码)

How to replicate the Traccar Sever connection to a device (castel protocol by TCP) in a single Java class? (to connect, disconnect encode and decode)

  1. 案例:

我有一个发送数据的 TCP 客户端,我想听到来自我的服务器的数据。所以,在这里,一切都好。

我决定在端口 9876 上创建一个套接字服务器来监听这个设备(使用 Java 8)。我收到的数据很奇怪,当我打印的时候是这样的:“嘻嘻嘻”,但理论上,传来的数据应该是一个十六进制。这是设备发送的包示例(登录):

40407F000431303031313132353239393837000000000000001001C1F06952FDF069529C91110000000000698300000
C0000000000036401014C00030001190A0D04121A1480D60488C5721800000000AF4944445F3231364730325F53205
6312E322E31004944445F3231364730325F482056312E322E31000000DF640D0A

我想以一种简单的方式(一个 class 如果可能)复制 castel 与设备(Traccar 服务器应用程序的端口 5086)的连接,几乎有 6 种方法:

我的目标是用 PHP 复制这种行为。我尝试使用 Websocket/HTTP 协议,结果是无法连接。我听不到设备发出任何包裹。

所以,其他问题可能是:我如何编写自己的自定义协议 (Castel) 以将服务器与这些设备连接?

我查看了 Traccar 服务器代码,但它非常广泛。我用它证明了该设备并且它可以工作,但我不明白如何(在代码级别)。

  1. 文档

Traccar 服务器包括很多不同的东西,但如果你愿意,你可以只使用协议解析部分。这是 Castel 协议的解码器:

github.com/traccar/.../CastelProtocolDecoder.java

解码器是基于Netty的,所以如果你想使用它,你需要实现服务器的其余部分来监听传入的连接。我建议查看 Netty 指南以获取有关如何操作的更多详细信息:

https://netty.io/wiki/user-guide-for-4.x.html