如何使用Qt为多播组打开udp套接字?

时间:2009-07-24 11:04:37

标签: qt networking udp qtnetwork

我对Qt&网络套接字。如果我的计算机在不同的网络中有多个IP地址,我如何在特定的网络适配器/ IP地址上为多播组打开一个udp套接字。

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

2 个答案:

答案 0 :(得分:3)

您应该在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));
...

答案 1 :(得分:0)

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