Qt QUdpSocket запускает readyRead () при отправке данных - PullRequest
0 голосов
/ 06 ноября 2019

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

Кто-нибудь может помочь?

...