Я написал следующую простую программу для связи 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 () никогда не срабатывает.
Кто-нибудь может помочь?