从多个发件人接收UDP消息并通过TCP转发

时间:2015-01-29 16:19:38

标签: tcp udp socat

我正在尝试使用socat通过TCP转发UDP流量。我知道这个过程会丢失帧边界,但在这种情况下这不是问题。我设法使用此命令使其部分工作:

socat TCP-LISTEN:20000,fork UDP4-LISTEN:10000,reuseaddr

即,socat等待客户端连接到TCP套接字,然后分叉侦听UDP套接字的新子进程。多个客户端应该能够使用TCP进行连接,并且每个客户端都应该获得每个收到的UDP消息。只要只有一个端点将数据发送到UDP套接字,这就可以工作。但是,如果第二个端点正在向UDP套接字发送数据,则不会通过已建立的TCP连接转发该数据。

一旦收到第一个数据包或以其他方式过滤从其他主机发送的数据,似乎socat在分叉子进程中的UDP套接字上调用connect()

有没有办法指示socat不过滤UDP流量并从发送到侦听UDP套接字的任何端点转发数据包?

1 个答案:

答案 0 :(得分:0)

我不认为这可以通过socat完成,而且我也没有看到"重复使用"选项甚至在我的2.0.0-b4版本中。

假设命令:

socat TCP-LISTEN:20000,fork,reuseaddr UDP-RECVFROM:10000,reuseaddr

据我所知,在我的系统中,将UDP消息发送到所有 TCP连接的客户端。它只会将消息从一个UDP客户端一次发送到一个TCP客户端,一旦下一个UDP客户端连接它就会将数据发送到下一个TCP客户端。