我正在尝试使用串行端口在两台计算机之间进行通信,并且我是这方面的新手。我需要从一台计算机(比如A)向另一台(比如B)发送请求,并接收对发送的请求的响应。我正在使用响应更新Java Swing用户界面。
我使用jSSC库来做这件事。我已经看过SerialPortReader
examples了,下面是我的理解。
我必须在两台计算机上实现SerialPortEventListener
。A将使用writeBytes
方法发送请求。B将侦听使用SerialPortEventListener
发送的命令,并使用writeBytes
方法发送响应。A将使用其SerialPortEventListener
实现来侦听数据,并且当接收到数据时,将更新UI。以下是我的问题。
a)我上面的观察结果正确吗?是否有不同的方法来完成此操作(例如,协议中是否可能存在将返回响应的writeBytes
方法?)
b)我分几步读到串行端口通信可以是同步的,也可以是异步的。但从示例中,我不能理解该代码实现的是异步通信还是同步通信。如何使用jSSC实现同步/异步通信?我不是在要求一个实现。只是一些指导方针和可以使用的方法。
c)消息可能会部分传递。例如,如果我以字符串"get variableThreeValue“的形式发送命令,则可能只接收到"get”或类似于"get varia“的内容。(这可能会导致类似"get get”等的消息。)我该如何处理这种情况?再说一次,我不是在要求一个实现。只是一些指导方针和可以使用的方法。
发布于 2015-02-11 14:26:13
经典的“串口”是非常“低级”的东西。必须设置波特率、起始和停止位以及流量控制等参数,然后读取和写入字节序列。Java库使用侦听器接收事件,这些事件直接派生自串行驱动程序所感知的内容(您可以在javadoc中找到类似于"line“的术语)。如何反应,取决于“另一面”。
流控制是用来避免接收器超限或超载的。RS-232的线路包含C(lear)T(o)S(end)和R(equest)TS,因此“硬件握手”是一种选择。或者,US-ASCII定义了控制字符XON和XOFF,如果数据流不是二进制数据,则可以嵌入到数据流中。如果发送端没有全速发送,或者计算机在速度上有很大差异,那么流量控制不应该成为问题。
据我所知,您将连接一些无线电设备到端口,其文档应该指定所有参数,以及更高级别的协议,即如何发送和接收数据。设备可能有特殊要求,例如,在传输实际数据之前,您必须传递一些设置数据。(如果您只用一根电缆连接两台计算机,那么一切都取决于您。)
一旦你基本上可以发送和接收,你就必须考虑安全传输。您需要设计一个协议:
WLAN连接应该会使大部分操作变得不必要。真正的“无线电”(一些短波?)我没听说过,但我不是无线电专家。
发布于 2015-04-23 03:45:58
XON/XOFF是软件流程控制。假设生产者a和b之间的双向串行字节。如果其中任何一个发送XON字节,则表示哇,停止发送我的字节,直到我发送XOFF字节。
对于硬件,用CTS替换XON字节,用RTS替换XOFF字节。
https://stackoverflow.com/questions/28446900
复制相似问题