1

Windows には 2 つの物理インターフェイスがあります。各インターフェースで、IPv4 と IPv6 の 2 つの IP アドレスを設定します。次のコードは、この構成での動作を修正しません: joinMulticastGroupは、最初のインターフェースに対してのみtrueを返し、次のインターフェースに対してはjoinMulticastGroupがfalseを返します。

しかし、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;
}
4

3 に答える 3

2

私は最近マルチキャストと Qt を扱っていましたが、この問題は Qt 5.6 と Win7 でもまだ存在しているようです。

問題は、joinMulticastGroup()IPV4 か IPV6 かを確認せずにインターフェイスの最初のアドレスを使用することです (バインドで AnyIpv4 を使用している場合でも)。

この問題は公式の Qt リリースでは修正されていませんが、提案されたパッチは私にとってはうまくいきます。

https://bugreports.qt.io/browse/QTBUG-27641

于 2016-05-22T17:36:46.203 に答える