代码之家  ›  专栏  ›  技术社区  ›  Bernd Jacobi

如何在所有连接的网络上发送UDP多播?

  •  0
  • Bernd Jacobi  · 技术社区  · 10 年前

    我有三个网络接口(在我的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),它没有通过绑定调用绑定到任何地址。

    我尝试将数据报发送到239.255.255.250。正如我在Wireshark中看到的,只有192.168.139.1源地址用于通过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 回复  |  直到 10 年前
        1
  •  2
  •   user207421    10 年前

    你走在正确的轨道上。您必须按照上面的代码依次循环通过每个NIC发送的所有NIC。10049是由于指定了一个错误的地址或一个不属于此主机的地址而导致的。在这种情况下,您错误地传递了适配器ID而不是IP地址。