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 ) を実行しようとすると、データグラムがうまく読み取られます。私のアプリケーションの同じコードでは、何も読み取られていませんでした。
私を助けてくれる人に感謝します。