4

我需要能够将 tcp 连接多路复用到单个虚拟 tty,以测试通过串行端口通信的软件。我一直在使用以下命令创建一个侦听 tcp 端口的服务器,然后将数据转发到 PTY。

socat -d -d PTY,link=/dev/ttyV1,waitslave,echo=0,raw TCP-LISTEN:11313,reuseaddr,fork

我的问题是当端口 11313 上的 tcp 客户端断开连接时,socat 删除了我到 /dev/ttyV1 的链接,从而终止了与其他所有连接的人的会话。

有没有办法保留这个链接?或者也许在 socat 之外创建一个伪 tty,这样我就不必担心维护它?我已经尝试过 /dev/tty1 和 /dev/ttyS1 并且我没有任何运气。我对这些的命令是:

socat -d -d file:/dev/tty1,nonblock,echo=0,raw TCP-LISTEN:11313,reuseaddr,fork

我的要求:能够在一端连接一个软件到一个串行tty,然后在另一端连接多个tcp客户端。Tcp 客户端消息传递被正确序列化和多路复用,因此消息不会相互重叠。

4

2 回答 2

7

好吧,我似乎找到了适合自己的解决方案。您必须首先创建一个虚拟零调制解调器对,然后打开虚拟零调制解调器对的一端并将其与 TCP 侦听器链接。

socat -d -d PTY,raw,echo=0,link=/dev/ttyVA00 PTY,raw,echo=0,link=/dev/ttyVB00

然后

socat -d -d open:/dev/ttyVA00,nonblock,echo=0,raw TCP-LISTEN:11313,reuseaddr,fork 

我可以连接任意数量的客户端,并且一切似乎都在工作。

于 2013-12-20T19:48:28.440 回答
5

为什么不直接使用“unlink-close=0”?

例如

socat -d -d PTY,link=/dev/ttyV1,waitslave,echo=0,raw,unlink-close=0 TCP-LISTEN:11313,reuseaddr,fork
于 2014-05-06T21:24:28.817 回答