Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 带有虚拟tty链接和分叉的socat将删除我的pty链接_Sockets_Tcp_Serial Port_Listener_Socat - Fatal编程技术网

Sockets 带有虚拟tty链接和分叉的socat将删除我的pty链接

Sockets 带有虚拟tty链接和分叉的socat将删除我的pty链接,sockets,tcp,serial-port,listener,socat,Sockets,Tcp,Serial Port,Listener,Socat,我需要能够多路传输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的链接,从而终止与所有其他连接者的会话 有没有办法保留这个链接?或者

我需要能够多路传输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客户端消息被正确地序列化和多路传输,这样消息就不会互相重叠。

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

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

我可以连接任意数量的客户端,而且一切都正常。

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

e、 g


好吧,我似乎已经为自己找到了解决办法。您必须首先创建虚拟空调制解调器对,然后打开虚拟空调制解调器对的一端并将其与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,原始TCP-LISTEN:11313,reuseaddr,fork
我可以连接任意数量的客户端,而且一切似乎都正常。如果这样做有效,你能把它作为答案并接受它吗?这很有意义。谢谢你的指导+这对我帮助很大。但是,为什么要创建两个虚拟串行端口?当使用fork时,当客户端断开连接时,pty链接总是会断开并删除。因此,在上面的示例中,当有人连接到/dev/ttyVB00,然后断开连接时,/dev/ttyVB00将被SOCAT删除。因此,当其他人尝试连接时,将没有可连接的PTY。第一对用于确保始终有空对可用,第二对用于将其中一对连接到侦听tcp端口上的fork调用。这样,在断开ttyVA00和ttyVB00上的原始空对时,ttyVA00始终保持打开状态,以便将来进行连接。希望这是一个好的解释!这在我的脑海中是清楚的,但当我试图写出来时并不总是清楚:)所以我总是会写到/dev/ttyVB00,因为ttyVA00只是一个连接器?当然,这是正确的。在上面的示例中,端口11313将连接到/dev/ttyVB00。@srclosson我尝试了这个命令,但是它没有创建TCP服务器。因为等待奴隶?
socat -d -d open:/dev/ttyVA00,nonblock,echo=0,raw TCP-LISTEN:11313,reuseaddr,fork 
socat -d -d PTY,link=/dev/ttyV1,waitslave,echo=0,raw,unlink-close=0 TCP-LISTEN:11313,reuseaddr,fork