如何通过所有连接的网络发送UDP多播?

时间:2014-07-13 18:42:02

标签: sockets networking udp multicast

我有三个网络接口(在我的Window 7下)

192.168.0.2   - real network card (interface id: 10)
192.168.180.1 - vmware adapter 1 (interface id: 21)
192.168.139.1 - vmware adapter 2 (interface id: 22)

我有UDP套接字(AF_INET),它没有通过bind调用绑定到任何地址。

我尝试将数据报发送到239.255.255.250。正如我在Wireshark中看到的那样,只有192.168.139.1源addr用于通过192.168.139.0/24网络发送数据报。

我想我需要告诉winsock它必须从哪个接口发送数据报并尝试调用setsockopt:

UINT adapterId = 10;
setsockopt(sock, IPPROTO_IP, IP_MULTICAST_IF, (char*)&adapterId, sizeof(adapterId));

但我在这里收到了10049(WSAEADDRNOTAVAIL)错误。

如何通过我的真实网络或多宿主主机的所有网络发送数据报?

很久以前我的代码(但是没有setsockopt调用)在WinXP下运行正常,但我记不清了,那个系统有一个网络适配器还是多个。

1 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。您必须按照上面的代码依次遍历通过每个NIC发送的所有NIC。 10049是由指定错误的地址或对该主机不是本地的地址引起的。在这种情况下,您错误地传递了适配器ID而不是IP地址。