代码之家  ›  专栏  ›  技术社区  ›  Tobias Langner

如何为具有qt的多播组打开UDP套接字?

  •  1
  • Tobias Langner  · 技术社区  · 15 年前

    我有一个关于qt&network sockets的问题。如果我有一台计算机在不同的网络中具有多个IP地址,我如何在特定的网络适配器/IP地址上打开多播组的UDP套接字。

    例如:IP 192.168.2.1 172.20.0.1 我想创建一个从多播组接收数据包的套接字 228.5.6.7 172.20.0.1 网络适配器。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Indy9000    15 年前

    你应该把它放进去 imr_interface 如下所示:(可能设置为 INADDR_ANY 现在)

    struct ip_mreq mreq;
    mreq.imr_multiaddr.s_addr = inet_addr("228.5.6.7");
    mreq.imr_interface.s_addr = inet_addr("172.20.0.1");// <---- right here
    ...
    QSocketDevice* sdev = new QSocketDevice(QSocketDevice::Datagram);
    ...
    setsockopt(sdev->socket(), IPPROTO_IP, IP_ADD_MEMBERSHIP,(const char *)&mreq, sizeof(struct ip_mreq));
    ...
    
        2
  •  0
  •   ewanm89    15 年前

    如果它是一个侦听套接字,您可以使用绑定到IP地址将其绑定到要侦听的特定IP地址。 如果它是一个客户机套接字,操作系统将管理创建它的正确接口,以便根据路由表规则到达该IP地址。