以下是有关我的开发环境的信息:
窗口:
操作系统: Windows 10
Qt: 5.15.2
编译器: MSVC2019
MAC:
操作系统: macOS Catalina (v10.15.7)
Qt: 5.15.2
编译器: clang 64位
在我的应用程序中,我向运行在不同PC上的同一应用程序的其他实例发送一些多播数据包。下面是代码片段:
QUdpSocket myMulticastSocket;
// PC_PORT_TO_RECEIVE is the port number used for all application client multicast communication
#ifdef Q_OS_MAC
myMulticastSocket.bind(PC_PORT_TO_RECEIVE, QUdpSocket::ReuseAddressHint);
#else
myMulticastSocket.bind(QHostAddress::AnyIPv4, PC_PORT_TO_RECEIVE, QUdpSocket::ReuseAddressHint);
#endif
QHostAddress tHostAddr = lstValidIface.at(i); // lstValidIface is a list of valid network interfaces available.
// don't take any action for local host
if ((tHostAddr == QHostAddress::LocalHost) ||
(tHostAddr == QHostAddress::LocalHostIPv6) ||
(tHostAddr == QHostAddress::AnyIPv6) ||
(tHostAddr == QHostAddress::Any))
continue;
DWORD tIPAddr = htonl(tHostAddr.toIPv4Address());
int sktDesptr = myMulticastSocket.socketDescriptor();
int iErrCode = setsockopt(sktDesptr,
IPPROTO_IP,
IP_MULTICAST_IF,
(char*)&tIPAddr,
sizeof(tIPAddr));上述代码在Windows环境下运行良好。但是在MAC中,对setsockopt的调用正在返回SOCKET_ERROR (-1)。我不能说出问题出在哪里。
如果上面的代码有任何错误,请让我知道,如果需要做任何额外的工作,使此代码在MAC上工作。
提前谢谢。
发布于 2021-05-05 13:55:01
用上面提到的Windows的套接字调用替换bind方法调用,帮助我解决了这个问题。
https://stackoverflow.com/questions/67387290
复制相似问题