qt - Qt QUdpSocket 在发送数据时触发 readyRead()
问题描述
我为 UDP 通信编写了以下简单程序:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
udpSocket = new QUdpSocket(this);
udpSocket->bind(QHostAddress::AnyIPv4, 4000);
connect(udpSocket, SIGNAL(readyRead()), this, SLOT(readDataFromSocket()));
udpSocket->writeDatagram("Test Data", QHostAddress("192.168.2.91"), 3000);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::readDataFromSocket()
{
while (udpSocket->hasPendingDatagrams()) {
udpSocket->receiveDatagram();
qDebug()<<"UDP data received";
}
}
现在的问题是,当我运行这个程序时,readyRead() 也会在发送数据时触发。几个有趣的发现:
我尝试将数据发送到网络上的不同 IP。对于少数 IP,它不会触发我的 readyRead() 函数。但是对于大多数 IP,readyRead() 确实会触发。
虽然 udpSocket->hasPendingDatagrams() 返回 true,但它没有任何数据。
我正在运行 Qt 5.12.3(MSVC 2017,32 位)。当我在 Qt 5.3.2(MSVC 2010,32 位)中运行相同的程序时,它工作正常,我的 readyRead() 永远不会触发。
任何人都可以帮忙吗?
解决方案
推荐阅读
- node.js - 如何在预定义时间后切断 aws sdk s3 的连接?
- sas - 我更改了列名,但 SAS PROC REPORT 仍使用旧名称
- powershell - powershell版本号比较
- sql - 如何在rails中的同一张表上获得具有不同where条件的列的总和?
- c# - 在MVC中的javascript中嵌套foreach
- ruby-on-rails - Rails - 检查查询是否没有返回结果
- java - Wildfly:服务器重启后授权失败
- powershell - 如何在 PowerShell 中将 UInt32 转换为(负)Int32?
- java - Apache flink 无法编译加入流代码 | Kinesis 数据分析
- typescript - 如何在 iModelJS 中获取元素的坐标