В Windows у меня есть два физических интерфейса. На каждом интерфейсе устанавливаются два IP-адреса: IPv4 и IPv6. Следующий код не правильной работы в этой конфигурации: joinMulticastGroup возврат только верно для первого интерфейса и на следующий интерфейс joinMulticastGroup возвращение ложь.Qt: joinMulticastGroup для всех интерфейсов
Но, если я отключу IPv6 на интерфейсах Windows, этот код работает.
Помогите мне разобраться.
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 –