使用socat将TCP连接到虚拟串行端口

使用socat将TCP连接到虚拟串行端口

我有一个程序(程序 1),其中有一个在端口 1234 上监听的 TCP 服务器。我已确认该服务器接受连接并使用实用程序 str2str 发送数据。

同一台机器上的程序 2 需要此数据,但配置为通过串行端口接收。我需要以某种方式将 TCP 数据转发到(我认为)虚拟串行端口。

我尝试设置以下虚拟串行端口对,将 TCP 数据传输到 /dev/ttyVA00,以便程序 2 可以从配对的 ttyVB00 读取数据:

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

链接已设置,但我真的迷路了,我尝试了以下操作,但我看不到 ttyVB00 传入任何数据:

sudo socat TCP:localhost:1234 pty,link=/dev/ttyVA00,raw,echo=0

有人能帮我指点迷津吗?或者更好的是,提供一个解决方案?

谢谢

答案1

你的第二个命令没有打开现有的 /dev/ttyVA00 设备;你要求 socat 创建一个新的pty 设备,覆盖旧设备。(用 TCP 术语来说,它不是连接到 /dev/ttyVA00 – 而是在 /dev/ttyVA00 监听传入连接。)

但是,你的第二个命令在其自己的已经足以将 TCP 数据传输到打开 /dev/ttyVA00 设备的任何进程。无需创建一对 pty,因为整點pty 的一个优点是软件可以直接连接到 pty 的“后端”。 (事实上,这正是 socat 在第一个命令中所做的!它不会创建一对链接的 pty A–B;它只是 A–socat 和 socat–B。)

答案2

谢谢@user1686,你帮我解决了这个问题,正如你所说,我的第二个命令是覆盖设备而不是写入设备。然而虚拟对是必要的:

sudo socat -d -d pty,link=/dev/ttyVA00,echo=0,perm=0777 pty,link=/dev/ttyVB00,echo=0,perm=0777

第二条命令连接到程序 1,并将其数据流转发到 ttyVA00,指定波特率:

socat TCP:localhost:1234 /dev/ttyVA00,b115200,raw,echo=0

现在可以通过 minicom 访问 ttyVB00,例如:

minicom -b 115200 -o -D /dev/ttyVB00

相关内容