0

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

我正在使用jSSC库来执行此操作。我已经查看了SerialPortReader示例,以下是我的理解。

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

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

b)我在几个方面读到串行端口通信可以是同步的或异步的。但是从示例中,我无法理解该代码是否实现了异步或同步通信。如何使用 jSSC 实现同步/异步通信?我不是要求实施。只是一些指导方针和可以使用的方法。

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

4

2 回答 2

1

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

流量控制是用来避免接收器溢出或溢出的。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 内都没有收到另一条消息怎么办?
  • 是否需要心跳,即在通道空闲时发送消息以获知对方仍然“活着”。

WLAN 连接应该使大部分操作变得不必要。真正的“无线电”(一些短波?)我从未听说过,但我不是无线电专家。

于 2015-02-11T06:26:12.817 回答
0

XON/XOFF 是软件流控制。假设生产者 a 和 b 之间的双向串行字节。如果其中任何一个发送 XON 字节,这意味着哇,请停止向我发送字节,直到我向您发送 XOFF 字节。

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

于 2015-04-22T19:45:58.147 回答