我正在尝试开发一个 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)它可以很好地读取数据报。在我的应用程序中使用相同的代码,没有读取任何内容。
感谢谁会帮助我。