与JSSC的同步/异步串行端口通信



我正在尝试使用串行端口在两台计算机之间进行通信,我是该领域的新手。我需要从一台计算机(比如A)向另一台计算机发送请求(比如B),并接收对所发送请求的响应。我正在用响应更新JavaSwing用户界面。

我正在使用jSSC库来做这件事。我已经看了SerialPortReader的例子,下面是我的理解。

我将不得不在两台计算机上实现SerialPortEventListener。A将使用writeBytes方法发送请求。B将监听使用SerialPortEventListener发送的命令,并将使用writeBytes方法发送响应。A将使用其SerialPortEventListener的实现来侦听数据,并且当接收到数据时,将更新UI。以下是我的问题。

a) 我的上述观察正确吗?有没有不同的方法可以做到这一点(例如,协议中是否存在返回响应的writeBytes方法?)

b) 我在几步中了解到,串行端口通信可以是同步的,也可以是异步的。但从这些例子中,我无法理解该代码是实现了异步通信还是同步通信。如何使用jSSC实现同步/异步通信?我不是要求执行。只是一些指导原则和可以使用的方法。

c) 消息可能会部分传递。例如,如果我将命令作为字符串"get-variableThreeValue"发送,则可能只会收到"get"或类似"get-vria"的内容。(这可能会导致"get get"等消息。)我该如何处理这种情况?同样,我并不是要求执行。只是一些指导原则和可以使用的方法。

经典的"串行端口"是非常"低级"的东西。必须设置波特率、开始和停止位以及流量控制等参数,然后读取和写入字节序列。Java库使用侦听器来接收事件,这些事件直接源于串行驱动程序的感知(您可以在javadoc中找到类似"line"的术语)。如何反应,取决于"对方"。

流量控制是用来避免接收器溢出或过满的。RS-232的线路包含C(lear)T(o)S(end)和R(equest)TS,因此"硬件握手"是一种选择。或者,US-ASCII定义了控制字符XON和XOFF,如果它不是二进制数据,则可以嵌入数据流中。如果发送端没有全速发送,或者计算机的速度差异很大,那么流量控制应该不是问题。

据我所知,您将把一些无线电设备连接到端口,其文档应指定所有参数,以及更高级别的协议,即如何传输和接收数据。设备可能有特殊要求,例如,在传输实际数据之前,必须传递一些设置数据。(如果你只用一根电缆连接两台电脑,那么一切都由你决定。)

一旦你基本上可以发送和接收,你就必须考虑安全传输。你需要设计一个协议:

  • 消息格式,例如包含长度、序列号、数据字节、CRC
  • 消息排序,即谁可以发送什么以及何时发送,例如,消息a到B,从B到a的确认,重复。或者来自B的NAK,a必须重新发送
  • 也许您需要一个"会话协议",即登录(如ftp)和注销
  • 超时:如果任何一方在t内没有收到另一条消息怎么办
  • 你是否需要心跳,即在通道空闲时发送一条消息,以了解对方仍然"活着"

无线局域网连接应该使这一切变得毫无必要。真正的"无线电"(短波?)我从来没有听说过,但我不是无线电专家。

XON/XOFF是软件流控制。假设生产者a和b之间有双向串行字节。如果其中一个发送XON字节,则表示whoa,请停止向我发送字节,直到我向您发送XOFF字节。

对于硬件,将XON字节替换为CTS,将XOFF字节替换为RTS。

相关内容

  • 没有找到相关文章

最新更新