我对Qt&网络套接字。如果我的计算机在不同的网络中有多个IP地址,我如何在特定的网络适配器/ IP地址上为多播组打开一个udp套接字。
例如:ip 192.168.2.1
和172.20.0.1
我想创建一个套接字,从228.5.6.7
网络适配器上的组播组172.20.0.1
接收数据包。
答案 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地址。