我正在尝试测试以下环境:
一台服务器(它是一个路由器,它有 busybox 和其他一些 cmd),带有一个物理串行端口和一个开放套接字
#tcpsvd -v 0.0.0.0 -p 999 cat /dev/ttyS0
多个客户端连接到服务器
我的问题:1 当我向 ttyS0 写入新行数据时,每次随机仅向一个客户端发送新行数据,我希望同时向所有客户端发送。2 我可以使用什么代替 cat 进行双向通信?3 我如何才能使流按字节而不是按行发送?
谢谢!
我正在尝试测试以下环境:
一台服务器(它是一个路由器,它有 busybox 和其他一些 cmd),带有一个物理串行端口和一个开放套接字
#tcpsvd -v 0.0.0.0 -p 999 cat /dev/ttyS0
多个客户端连接到服务器
我的问题:1 当我向 ttyS0 写入新行数据时,每次随机仅向一个客户端发送新行数据,我希望同时向所有客户端发送。2 我可以使用什么代替 cat 进行双向通信?3 我如何才能使流按字节而不是按行发送?
谢谢!
不幸的是,这是串行端口通信的标准功能:TTY 设备是一个简单的 FIFO。一旦从 TTY 设备读取数据,数据就消失了。这就是为什么让多个进程同时访问同一个 TTY 设备通常不是一个好主意。
RS-232 串行线基本上是一对一的:为串行端口设计的设备和协议被设计为只期望线路另一端有一个链接伙伴。
如果您需要具有单个串行端口的多个 TCP 客户端,恐怕您可能必须编写自己的程序来按照您需要的方式进行通信。
microcom
是一个 busybox 命令,似乎适合此处的目的。根据 busybox 手册页,它使用 stdin 和 stdout,因此它应该可以与tcpsvd
... 一起使用,但我尚未测试过它。假设我理解了你的问题,
stty -F /dev/ttyS0 raw
应该这样做,但如果你切换到microcom
而不是cat
,它应该已经为你做到了。我假设您受到路由器上可用资源的限制,因此上述答案仅假设 busybox,因为我不知道还有哪些其他命令可用。
但是如果您可以添加更多软件,那么我建议使用专门设计的一些软件,例如
ser2net
。