Не удается получить дейтаграмму с помощью qudpsocket, вместо нее отправляется пустой - PullRequest
0 голосов
/ 07 декабря 2018

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

...