Не удается получить дейтаграмму с помощью qudpsocket, вместо нее отправляется пустой

У меня есть приложение, получающее данные udp и отправляющее их в разные адреса и порты дальше. Один пакет должен быть отправлен приложением самому себе, и я не могу заставить его работать должным образом (хотя все другие пакеты работают вполне корректно). Пакет отправляется, но когда я пытаюсь его получить, я получаю только пустую дейтаграмму (которую я не отправляю, и, насколько я знаю, ничто иное не отправляет ничего в данный момент). Правильный пакет никогда не получен.

Я пытаюсь управлять отправкой и получением по одному сокету, не уверен, правильно ли это. Вот мой код

myClass::myClass(QObject *parent):
    QObject (parent)
{
  ///....
  //some code
  my_socket = new QUdpSocket(this);
  connect(my_socket, SIGNAL(readyRead()), this, SLOT(readMyDatagram()));
  ///....
  //some other code
}

void myClass::restartListening(quint16 _port)
{

    if (my_socket->state() != QAbstractSocket::UnconnectedState)
        {
            my_socket->abort();
        }
        
        if(!my_socket->bind(QHostAddress::Any, _port))
        {
            auto error = my_socket->errorString();
            return;
        }

}

void myClass::sendMyDatagram(const QByteArray& packet)
{

 if (my_socket->writeDatagram(packet, myadress, myport) == -1)
 {
  qWarning() << my_socket->errorString();
 }

}

void TheClass::readMyDatagram()
{
   QByteArray datagram;
   QHostAddress sender;
   quint16 senderPort;

    if (my_socket->hasPendingDatagrams())
    {
        while (my_socket->hasPendingDatagrams())
        {
            datagram.resize(my_socket->pendingDatagramSize());

            my_socket->readDatagram(datagram.data(), datagram.size(),
                                &sender, &senderPort);
        }
    }

    if (datagram.size() == 0)
    {
        qWarning() << my_socket->errorString();
    }
    else
    {
        emit newDatagram(datagram);
    }
}

Поэтому, когда порт для прослушивания изменяется, вызывается restartListening(). Я отправляю пакеты с помощью sendMyDatagram(). Отправленный пакет не пустой в функции, и затем readMyDatagram() вызывается правильно, но всегда с пустым (он появляется после datagram.resize(..) Я дважды проверил, все порты разные. Что я могу возможно не так ли?

0 ответов

Другие вопросы по тегам