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