【发布时间】:2020-12-29 19:05:57
【问题描述】:
我们有两个应用程序
- 第一个是 UDP 服务器,它使用 SOURCE 端口 (12345) 进行侦听和响应
- 第二个应用是只响应不监听,我们需要用指定的源端口(12345)响应
如何做到这一点?
我们正在尝试使用多种场景,但是:
- 我们无法在第二个应用程序中绑定套接字,因为它在第一个应用程序中使用过
- 我们不能在第二个应用程序中使用 SO_REUSEPORT 进行绑定,因为这个应用程序开始获取 UDP 数据而不是第一个应用程序
- 我们可以使用 IPC 从第二个应用程序到第一个应用程序,然后像往常一样发送 UDP (sendto),但这是一个非常庞大的解决方法
【问题讨论】:
-
这不是(IMO)编程问题,而是设计、分析甚至需求问题。导致多个应用程序需要使用同一个端口的原始要求是什么?
-
您不能在进程之间共享这样的端口,至少不容易。您需要一个中间的代理来处理流量,然后您可以使用 IPC 或其他 UDP 网络将它们路由到正确的目的地。或者,您可以尝试使用原始套接字来欺骗它,但我不确定这种方法会有多成功。
-
我不想共享端口,我只想从不同的应用发送具有相同 SOURCE 端口的 UDP 数据报。
-
medium.com/uckey/… 这表明无论如何这并不容易。
-
您系统的实际要求是什么?谁告诉你两个应用程序需要使用相同的端口?这个要求是从哪里来的?也许您需要花一些时间与您的技术主管和项目经理讨论此要求,或者甚至直接与客户交谈。
标签: c linux sockets networking udp