问题描述
以下是关于我的开发环境的信息:
Windows:
操作系统:Windows 10
Qt:5.15.2
编译器:MSVC2019
MAC:
操作系统:macOS Catalina (v 10.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 上运行。
提前致谢。
解决方法
将 Mac 套接字的绑定方法调用替换为上面提到的 Windows 套接字,帮助我解决了问题。