【发布时间】:2017-09-15 15:15:00
【问题描述】:
我需要做一个重要的测试。测试条件如下。
我正在使用 winsock,并且我有 2 个带有 SO_REUSEADDR 选项的 UDP 套接字(Sock-A 和 Sock-B),它们都已绑定到一台 PC 上的端口 1000。 它们都将 UDP 数据包发送到另一个套接字(Sock-C),位于不同 LAN 的 Sock-C 接收它们的消息。
Sock-C 用一些消息回应他们,但不幸的是,我可以看到只有 Sock-A(它已更早打开)才收到消息,而 Sock-B 什么也没收到。当我关闭 Sock-A 时,我可以看到 Sock-B 开始接收消息。
你们有谁知道我应该怎么做才能让 Sock-A 和 Sock-B 都能接收到来自 Sock-C 的消息?
谢谢~
【问题讨论】:
-
在 WinSock 中是否提供 SO_REUSEADDR?您是否正在检查 setsockopt 的返回值? msdn.microsoft.com/en-us/library/windows/desktop/…
-
为什么要使用同一个端口——xyproblem.info?
-
是的,可以使用 SO_REUSEADDR 选项将同一个端口绑定到两个不同的套接字。
-
我需要使用相同端口的原因是,我有一个带有 UDP 侦听器的 Voip 软件来接收音频数据包。此应用程序已关闭,我无法更改它。我需要从不同 NAT 后面的某个地方向该软件发送音频数据包。为了处理这些对等点的 P2P 连接,我需要在同一主机上绑定一个与 voip 软件相同的 UDP 套接字,并将 UDP 数据包发送到音频数据包的来源。然后 NAT 没有端口转发和 STUN/TURN 和 ... 将数据包路由到 Voip 软件。
-
我很抱歉,但我无法用所提供的解释来想象您要做什么
标签: c sockets udp bind winsock