我有一个关于 Qt 和网络套接字的问题。如果我有一台在不同网络中具有多个 IP 地址的计算机,如何为特定网络适配器/IP 地址上的多播组打开 udp 套接字。
例如: ip192.168.2.1
并且172.20.0.1
我想创建一个套接字,用于从网络适配器228.5.6.7
上的多播组接收数据包。172.20.0.1
我有一个关于 Qt 和网络套接字的问题。如果我有一台在不同网络中具有多个 IP 地址的计算机,如何为特定网络适配器/IP 地址上的多播组打开 udp 套接字。
例如: ip192.168.2.1
并且172.20.0.1
我想创建一个套接字,用于从网络适配器228.5.6.7
上的多播组接收数据包。172.20.0.1
您应该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));
...
如果它是一个监听套接字,您可以使用绑定到 IP 地址将其绑定到特定的 IP 地址以进行监听。如果它是客户端套接字,则操作系统管理正确的接口以根据路由表规则在其上创建它以到达该 IP 地址。