计算机上的多个程序应该接收到达一个端口的网络流量

时间:2014-05-02 07:14:11

标签: networking udp osc

我有UDP网络流量到达我的机器(确切地说来自iPad的OSC流量),我希望两个程序能够接收该流量。问题是我无法同时使用两个程序绑定到同一个网络端口,而且我无法使用iOS应用程序发送到多个端口。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

您可以使用命令行的强大功能。以下代码段使用socat(可能需要事先安装)和tee(应在任何OS X或Linux上预先安装)。

socat -u UDP4-RECVFROM:8123,fork - | tee >(socat -u - UDP4-SENDTO:localhost:8223) | socat -u - UDP4-SENDTO:localhost:8323

解释socat侦听UDP端口8123上的流量,将其传输到tee,并将其传输到另外两个socat转发到{{1}}的实例分别在localhost上的端口8223和8323。使用您的两个程序,您需要在localhost上侦听这些端口。

答案 1 :(得分:0)

虽然使用socat的答案很优雅,但我不清楚你要做什么:

  • 两个程序都应该接收流量的所有部分,它们只会接收而不会回复。这可以使用建议的socat方式
  • 来完成
  • 两个程序都应该收到流量的所有部分,并且那里的回复会混合在一起(如何?)
  • 每个程序只应接收部分流量,例如:另一个没得到的那个。如果您的两个程序都使用SO_REUSEADDR,SO_REUSEPORT,则应该可以这样做。然后将回复混合在一起。
  • 或者你真的想要分别与每个程序进行通信 - 那么你必须在iOS应用程序中使用多个套接字(你不想做)或构建自己的协议来进行多路复用,例如每条消息都以目标应用程序作为前缀,在目标计算机上,多路分解器应用程序将接收所有数据包并将它们转发到相应的应用程序,并将回复包装回多路复用协议。

总结:请描述您尝试解决的问题,而不仅仅是它的一个小技术细节。

答案 2 :(得分:0)

  

问题是我不能同时使用两个程序绑定到同一个网络端口

是的,你可以。在绑定之前,只需在它们上面设置SO_REUSEADDRSO_REUSEPORT