在Windows中,我有兩個物理接口。在每個接口上設置兩個IP地址:IPv4和IPv6。 下面的代碼確實在這個配置不正確的工作:joinMulticastGroup的第一界面和一個界面joinMulticastGroup回報假只返回真正。Qt:所有接口的joinMulticastGroup
但是,如果我關閉Windows接口上的IPv6,此代碼工作。
幫我理解。
QUdpSocket udpSocket;
QHostAddress groupAddress;
groupAddress = QHostAddress("239.255.255.250");
udpSocket.bind(QHostAddress::AnyIPv4, 1900,
QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint);
QList<QNetworkInterface> mListIfaces = QNetworkInterface::allInterfaces();
for (int i = 0; i < mListIfaces.length(); ++i) {
bool rez = udpSocket.joinMulticastGroup(groupAddress, mListIfaces.at(i));
qDebug() << rez;
}
如有命名標誌()未設置不廣播。如果IPv4地址關聯,也只能在IPv4上進行多播。 –
對於所有接口設置CanMulticast,IsValid,IsRunning。不是在這種情況下。 'QNetworkAddressEntry :: ip()。protocol()== QAbstractSocket :: IPv4Protocol'和它對我來說是什麼?第一和第二接口具有IPv4地址和IPv6地址。 joinMulticastGroup僅加入第一個接口。但是如果接口沒有IPv6地址joinMulticastGroup連接兩者。 – AndreyKeen
您的代碼嘗試加入所有界面。但是'QUdpSocket :: joinMulticastGroup(const QHostAddress&groupAddress)'加入了操作系統選擇的默認接口(來自文檔)。檢查套接字錯誤的具體問題:''qDebug()<< QUdpSocket :: errorString();''MultiCast只適用於IPv4 –