Не могу прочитать из клиента QUdpSocket
Я посылаю команду в систему и читаю ответ от нее. Моя машина - клиент, я успешно записываю пакет на сервер, но не могу получить от него ответ. Мне интересно, почему это происходит, пожалуйста, посмотрите на мой код: (адрес сервера 192.168.100.143 и порт 11000)
void UDP::UDPInit(int port)
{
socketPort = port;
udpsocket = new QUdpSocket(this);
}
void UDP::sendCommand(QByteArray data)
{
QHostAddress *host = new QHostAddress("192.168.100.143");
quint16 port = 11000;
if(udpsocket->writeDatagram(data.data(),QHostAddress(ip),socketPort)==-1)
emit clientLogMessage(QString("UDPCLIENT : Write problem !"));
else
udpsocket->flush();
while (!udpsocket->hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(udpsocket->pendingDatagramSize());
qDebug() << udpsocket->pendingDatagramSize();
udpsocket->readDatagram(datagram.data(), datagram.size(), host, &port);
emit dataReceived(datagram);
}
}
1 ответ
QUdpSocket имеет сигнал readyRead, который генерируется каждый раз, когда новый пакет доступен, если вы находитесь в цикле обработки событий, я предлагаю вам использовать его
состояние в вашем времени отрицается, что означает, что udpsocket->pendingDatagramSize()
вернет -1 внутри цикла while и readDatagram
откажется от пакета
фиксированный код:
void UDP::UDPInit(int port)
{
socketPort = port;
udpsocket = new QUdpSocket(this);
connect(udpsocket, SIGNAL(readyRead()), this, SLOT(readSocket()));
}
void UDP::sendCommand(QByteArray data)
{
QHostAddress *host = new QHostAddress("192.168.100.143");
quint16 port = 11000;
if(udpsocket->writeDatagram(data.data(),QHostAddress(ip),socketPort)==-1)
emit clientLogMessage(QString("UDPCLIENT : Write problem !"));
else
udpsocket->flush();
}
void UDP::readSocket()
{
while (udpsocket->hasPendingDatagrams())
{
QByteArray datagram;
datagram.resize(udpsocket->pendingDatagramSize());
qDebug() << udpsocket->pendingDatagramSize();
udpsocket->readDatagram(datagram.data(), datagram.size(), host, &port);
emit dataReceived(datagram);
}
}