我正在开发一个从串口读取数据并通过TCP连接发送数据的应用程序,反之亦然。不幸的是,从串口读取数据时,它永远不会停止。它不会检测EOF标记,也不会检测EOL或其他特殊字符。
那么,我如何通过C和Linux中的串口检测文件结束(或“连接结束”)?
答案 0 :(得分:6)
取决于您对用于串行链路的协议的控制程度。除非文件隐含地包含一些文件结束标记(并且我已经理解了他们没有的帖子),否则你需要实现某种通信协议才能传输文件。
在BBS时代使用的一些最简单的procols是XMODEM,它是衍生物。它们可能很简单,您可以使用它。
如果您在串行线路的另一端有一台完整的计算机,那么通过串行线路建立PPP链路并通过TCP / IP进行通信可能会简单得多。
答案 1 :(得分:2)
串行链路仅发送字节。没有数据包帧,没有错误检查,因此您无法通过原始串行链路可靠地发送文件。您需要使用一些协议,如XMODEM,KERMIT等。
答案 2 :(得分:1)
串口在挂断条件下给出“文件结束”,由调制解调器控制线(丢弃DCD
)在带外发出信号。如果您使用零调制解调器连接,那将永远不会发生。
使用框架机制,就像其他答案所建议的那样。你可能不需要像ZMODEM这样的东西 - 只需要在文件前加上文件大小和CRC32校验和,如果链接没有合理的错误且8位清理。
答案 3 :(得分:0)
检查串口配置:
stty -F /dev/ttySx -a
设置cooked链接而不是raw链接:
stty -F /dev/ttySx cooked
答案 4 :(得分:0)