udp绑定/连接,但未接收到数据报 我是QT,C++的新手,最近我尝试使用UDP来接收来自另一个RasBuryRyPi2(多播)的RASBRYRYPI1数据。我可以绑定它们,但是我不能接收数据(nopendingdatagram)。我不知道我在这里做错了什
udp绑定/连接,但未接收到数据报 <>我是QT,C++的新手,最近我尝试使用UDP来接收来自另一个RasBuryRyPi2(多播)的RASBRYRYPI1数据。我可以绑定它们,但是我不能接收数据(nopendingdatagram)。我不知道我在这里做错了什么。(正如您可能注意到的,下面的代码取自在线找到的示例)。非常感谢你帮助我udp绑定/连接,但未接收到数据报 我是QT,C++的新手,最近我尝试使用UDP来接收来自另一个RasBuryRyPi2(多播)的RASBRYRYPI1数据。我可以绑定它们,但是我不能接收数据(nopendingdatagram)。我不知道我在这里做错了什,qt,udpclient,Qt,Udpclient,udp绑定/连接,但未接收到数据报 我是QT,C++的新手,最近我尝试使用UDP来接收来自另一个RasBuryRyPi2(多播)的RASBRYRYPI1数据。我可以绑定它们,但是我不能接收数据(nopendingdatagram)。我不知道我在这里做错了什么。(正如您可能注意到的,下面的代码取自在线找到的示例)。非常感谢你帮助我 // myudp.h #ifndef MYUDP_H #define MYUDP_H #include <QObject> #include <Q
// myudp.h
#ifndef MYUDP_H
#define MYUDP_H
#include <QObject>
#include <QUdpSocket>
class MyUDP : public QObject
{
Q_OBJECT
public:
explicit MyUDP(QObject *parent = 0);
//void HelloUDP();
signals:
public slots:
void readyRead();
private:
QUdpSocket *socket;
};
#endif // MYUDP_H
您不能自己调用readyRead(),而是要等到数据到达。请参见此处的示例:感谢您的评论。我已经更改了line connect(socket…)和readyRead()函数以匹配示例。不过,它并没有向我展示我想要的输出。我同时运行wireshark,它正在接收数据报。因此,我试图将我在wireshark和Qt上看到的东西形象化。我找到了一个解决方案。显然,raspberry无法直接接收多播。因此,可以通过将网络tram上的多播地址引导到raspberry上的本地主机来解决该问题。
// myudp.cpp
#include "myudp.h"
MyUDP::MyUDP(QObject *parent) :
QObject(parent)
{
// create a QUDP socket
socket = new QUdpSocket(this);
bool result = socket->bind(QHostAddress("224.224.0.2"), 10002);
if(result)
{
qDebug() << "Socket Connected";
}
else
{
qDebug() << "Socket Not Connected";
}
connect(socket, SIGNAL(readyRead()), this, SLOT(readyRead()));
}
void MyUDP::readyRead()
{
// when data comes in
bool data_pending = socket->hasPendingDatagrams();
qDebug() << data_pending;
if(data_pending)
{
QByteArray buffer;
buffer.resize(socket->pendingDatagramSize());
QHostAddress sender;
quint16 senderPort;
socket->readDatagram(buffer.data(), buffer.size(),
&sender, &senderPort);
qDebug() << "Message from: " << sender.toString();
qDebug() << "Message port: " << senderPort;
qDebug() << "Message: " << buffer;
}
else
{
qDebug() << "No data";
}
}
#include <QCoreApplication>
#include "myudp.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MyUDP client;
client.readyRead();
return a.exec();
}
Socket Connected
false
No data