双向套接字到tcp通信

时间:2013-11-18 09:03:17

标签: linux sockets tcp serial-port socat

我有一个软件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):地址已在使用中

有人可以帮助我解决我的问题吗?

2 个答案:

答案 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,则可以执行此操作。

请参阅Can two applications listen to the same port?

相关问题