1

UDPデータグラムを介して情報を更新するUDPサーバーからパケットを読み取るUDPデータグラムレシーバーを開発しようとしています。データグラムを受信し、ペイロードを読み取ってデータを更新した後。マルチキャスト レシーバーを開発するための Qt チュートリアルの例に従いました。コードをコピーしただけですが、例ではデータグラムを受信して​​読み取っていますが、アプリケーションの同じコードはそうではありません。働きたくない。私が間違っているのは何ですか?

私が開発したクラスのコードは次のとおりです。

UDPDataReceiver.h

class UDPDataReceiver: public QObject
{
    Q_OBJECT

public:
    explicit UDPDataReceiver(QObject *parent = nullptr);

public slots:
    void readPendingDatagrams();

private:
    QUdpSocket m_socket;
    QHostAddress groupAddress4;

};

UDPDataReceiver.cpp

UDPDataReceiver::UDPDataReceiver(QObject *parent) : QObject(parent),
    groupAddress4(QStringLiteral("234.5.6.7"))
{
    const QHostAddress &localhost = QHostAddress(QHostAddress::LocalHost);
//    for (const QHostAddress &address: QNetworkInterface::allAddresses()) {
//        if (address.protocol() == QAbstractSocket::IPv4Protocol && address != localhost)
//             qDebug() << address.toString();
//    }

    bool bound = m_socket.bind(localhost, 2471, QUdpSocket::ShareAddress);
    bool joined = m_socket.joinMulticastGroup(groupAddress4);
    connect(&m_socket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()));
}

void UDPDataReceiver::readPendingDatagrams()
{
    QByteArray datagram;

    while (m_socket.hasPendingDatagrams()) {
        datagram.resize(int(m_socket.pendingDatagramSize()));
        m_socket.readDatagram(datagram.data(), datagram.size());
       qDebug()<<datagram.constData()<<"Example implementation";
    }
}

MainWindow クラスのコンストラクターで、次のコードを呼び出してレシーバーのインスタンスを作成します。

 dataReceiver = new UDPDataReceiver(this);

マルチキャスト レシーバーの Qt サンプル ( https://doc.qt.io/qt-5/qtnetwork-multicastreceiver-example.html ) を実行しようとすると、データグラムがうまく読み取られます。私のアプリケーションの同じコードでは、何も読み取られていませんでした。

私を助けてくれる人に感謝します。

4

1 に答える 1