我正在使用 VC++ 编写一个串行端口应用程序,我可以在其中打开交换机设备上的端口,发送一些命令并显示它们的输出。我正在运行一个线程,它总是读取开放端口以输出给定命令。我的主线程一直等到读取完成,但问题是我如何识别命令输出结束,我应该向主线程发出信号。
问问题
772 次
1 回答
2
几乎任何串行端口通信都需要协议。某种方式让接收者发现响应已被完整接收。一个非常简单的方法是使用永远不会出现在其余数据中的唯一字节或字符。换行是标准的,例如任何调制解调器都使用。
当您需要传输任意二进制数据时,这需要更加详细。一个常见的解决方案是首先发送响应的长度。然后接收器可以对接收到的字节进行倒计时以了解何时完成。这通常需要用特定的起始字节值进行修饰,以便接收器有机会与发送器重新同步。并且通常包括校验和或 CRC,以便接收器可以检测传输错误。进一步的修饰是通过来自接收器的 ACK/NAK 响应使错误可恢复。这样你就可以很好地重新发明 TCP。RFC-916 中的 RATP 协议就是一个很好的例子,尽管它被广泛忽略了。
于 2013-04-05T14:20:49.763 回答