Не могу прочитать из клиента 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);
    }
}
Другие вопросы по тегам