我有一个软件X监听和写入TCP端口。即它创建了一个服务器套接字和一个读写TCP的客户端。
我有一个串行设备ttyUSB0,它可以接受提供软件X并将数据发送回串行的格式的数据。
我想将数据从串口送到TCP,反之亦然,这样它对软件X和串口ttyUSB0来说都是透明的。
我试图使用socat。像,
socat -d -d -d -d -x TCP-LISTEN:7758,fork,reuseaddr FILE:/dev/ttyUSB0,b9600,raw
但它似乎不起作用。看起来好像是TCP端口上的监听器阻塞绑定。我有
E bind(3,{AF = 2 0.0.0.0:7758},16):地址已在使用中
有人可以帮助我解决我的问题吗?
答案 0 :(得分:4)
正如一些评论者已经提到的,您无法与两个侦听器建立TCP连接。对于TCP连接,您始终需要服务器(侦听器)和客户端。
由于您的软件已经是服务器(侦听端口7758),因此应该以客户端模式运行socat(连接到您的服务器)。
这可以通过选项TCP:<host>:<port>
来完成,例如像这样(改编你的例子,未经过测试!):
socat -d -d -d -d -x TCP:localhost:7758 FILE:/dev/ttyUSB0,b9600,raw
答案 1 :(得分:1)
这对TCP来说是不可能的。请注意,您可以指定SO_REUSSEADDR,但这不会导致BOTH侦听应用程序接收数据:只有一个应用程序(由操作系统“随机”决定)将接收数据,而另一个应用程序将“听到”任何数据。
如果您可以使用多播UDP,则可以执行此操作。