C++ 为什么我的班级没有';使用Qt QUDPSocket接收UDP数据报?

C++ 为什么我的班级没有';使用Qt QUDPSocket接收UDP数据报?,c++,qt,qudpsocket,C++,Qt,Qudpsocket,我正在尝试开发一个UDP数据报接收器,从UDP服务器读取数据包,通过UDP数据报更新信息。我想接收数据报并在更新数据后读取有效负载。我按照Qt教程示例开发了一个多播接收器。我只是复制了代码,但是,当示例接收并读取数据报时,我的应用程序中的相同代码却没有。它不想工作。我做错了什么 下面是我开发的类的代码: UDPDataReceiver.h class UDPDataReceiver: public QObject { Q_OBJECT public: explicit UDPD

我正在尝试开发一个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";
    }
}
尝试运行多播接收器的Qt示例()时,它可以很好地读取数据报。 在我的应用程序中使用相同的代码时,没有读取任何内容


感谢帮助我的人。

我会给你一些提示

如果您使用Windows,则需要关闭防火墙或将应用程序添加到其列表中。 下一步。您可以尝试将变量
QUdpSocket m_socket
切换为
QUdpSocket*m_socket
。 然后尝试使用cycle
do{}while()
如下代码:

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

qDebug()绑定和加入的变量结果始终为真,运行应用程序。服务器处于活动状态,使用wireshark我可以看到数据报。感谢您的提示!我正在使用Windows,并尝试关闭防火墙…我尝试了所有解决方案和在线找到的所有可能提示,但最终我发现了问题。我发现的问题是由Virtual Box造成的s安装在我的电脑上。它使用了另一个QUdpSocket所指向的IP本地主机。将其重定向到虚拟盒IP现在一切正常。哦,我想查找这个问题太难了。现在我知道这个问题是因为你!
do
{
    datagram.resize(int(m_socket.pendingDatagramSize()));
    m_socket.readDatagram(datagram.data(), datagram.size());
    qDebug()<< datagram.constData() <<"Example implementation";
}while(m_socket.hasPendingDatagrams());