0

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

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

4

2 回答 2

4

正如一些评论者已经提到的,您不能与两个侦听器建立 TCP 连接。对于 TCP 连接,您总是需要一个服务器(监听器)和一个客户端。

由于您的软件已经是服务器(侦听端口 7758),因此 socat 应该在客户端模式下运行(连接到您的服务器)。

这可以通过选项来完成TCP:<host>:<port>,例如像这样(改编您的示例,未测试!):

socat -d -d -d -d -x TCP:localhost:7758 FILE:/dev/ttyUSB0,b9600,raw
于 2013-11-21T13:17:55.153 回答
1

这对于 TCP 是不可能的。请注意,您可以指定 SO_REUSSEADDR 但这不会导致两个侦听应用程序都接收数据:只有一个应用程序(由操作系统“随机”决定)将接收数据,而另一个应用程序将“听不到”任何数据。

如果您可以使用多播 UDP,您可以这样做。

请参阅两个应用程序可以侦听同一个端口吗?

于 2013-11-21T13:25:32.150 回答