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