Qt无法接收到UDP发送的包,但wireshark可以抓到

加盾男爵 2018-07-04 03:26:45
win7 + qt5.9 + mingw32

现在我的电脑里连接了一块板子,然后这个板子会不断的通过UDP我的电脑里发送消息,我用wiresshark抓包,显示,连接没有问题,并且那板子也一直在发送UDP的包包。

然后我写了一个用于接收UDP消息的类
h文件

class ReceiveUDP : public QObject
{
Q_OBJECT
private:
QString ip_String;

qint16 port_qint16;

QUdpSocket* messageReceive_UdpSocket;
public:
explicit ReceiveUDP(const QString& ip , qint16 port , QObject *parent = nullptr);
signals:
void messageFromUDP(const QString& msg);
private slots:
void receiveMessageFromUDP();


.cpp文件
#include "ReceiveUDP.h"

ReceiveUDP::ReceiveUDP(const QString& ip , qint16 port , QObject *parent) : QObject(parent),
ip_String(ip),
port_qint16(port)
{
messageReceive_UdpSocket = new QUdpSocket(this);
messageReceive_UdpSocket->bind(QHostAddress(ip_String),port_qint16);
//messageReceive_UdpSocket->setSocketOption(QAbstractSocket::MulticastLoopbackOption, 1);
connect(messageReceive_UdpSocket,SIGNAL(readyRead()),this,SLOT(receiveMessageFromUDP()));
}

void ReceiveUDP::receiveMessageFromUDP()
{
QString hear = tr("head+");
QByteArray datas;
while(messageReceive_UdpSocket->hasPendingDatagrams())
{
datas.resize(messageReceive_UdpSocket->pendingDatagramSize());
messageReceive_UdpSocket->readDatagram(datas.data(),datas.size());
emit messageFromUDP(QString((hear+datas)));
}

}


然后是这个类在主程序里的调用

receiveUDP_Object = new ReceiveUDP(HOST,PORT,this);
connect(receiveUDP_Object,SIGNAL(messageFromUDP(const QString&)),this,SLOT(showMSG(const QString&)));
//这个showMSG()槽是主程序里的自定义槽,这个槽会在控制台打印接受到的QString


程序运行的结果,是没有任何打印内容,但是wireshark确实一直能能抓到包包。。。所以我不知道问题出在哪里


然后我自己做了一个UDP发射函数,主要代码是这样的

messageSender_UdpSocket = new QUdpSocket(this);
QByteArray msg = "Hellow World.\n";
for(int i = 0 ; i < 10 ; ++i)
messageSender_UdpSocket->writeDatagram(msg,QHostAddress(HOST),PORT);

然后我把常量HOST改成了127.0.0.1,把常量PORT改成了23333,这时候再运行,控制台打印出了10个Hello World。
我想问下这个是什么情况?
...全文
1811 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ALONE_WORK 2020-10-19
  • 打赏
  • 举报
回复
遇到相同问题,我的还是一段时间后,软件界面有些操作后无法接受数据,wireshark 看是有数据的。 很郁闷,没有找到是啥问题。
Rat_boy 2019-09-04
  • 打赏
  • 举报
回复
请注意wireshark周围的ICMP,可能是你的端口问题,换一个端口试试。
w22net 2018-07-04
  • 打赏
  • 举报
回复
可能是端口被别的程序占用了,我也遇到过类似情况[/quote]
w22net 2018-07-04
  • 打赏
  • 举报
回复
肯能是端口被别的程序占用了,我也遇到过类似情况

16,816

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧