C++ QtUDPSocket:理解ReadyRead()信号处理

C++ QtUDPSocket:理解ReadyRead()信号处理,c++,qt,sockets,udp,C++,Qt,Sockets,Udp,从QUdpSocket数据报的官方QT文档中可以看到: void Server::initSocket() { udpSocket = new QUdpSocket(this); udpSocket->bind(QHostAddress::LocalHost, 7755); connect(udpSocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams())); } void

QUdpSocket
数据报的官方QT文档中可以看到:

void Server::initSocket()
{
    udpSocket = new QUdpSocket(this);
    udpSocket->bind(QHostAddress::LocalHost, 7755);

    connect(udpSocket, SIGNAL(readyRead()),
            this, SLOT(readPendingDatagrams()));
}

void Server::readPendingDatagrams()
{
    while (udpSocket->hasPendingDatagrams()) {
        QByteArray datagram;
        datagram.resize(udpSocket->pendingDatagramSize());
        QHostAddress sender;
        quint16 senderPort;

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

        processTheDatagram(datagram);
    }
}
我试图了解当信号发出时,会发生什么。在
while
循环中(在
Server::readPendingDatagrams()
插槽中),我们读取可用的数据报,但是如果新数据报附加到套接字,而我们仍然读取前一批数据报,会发生什么情况
readyRead()
信号是否会再次发出?但是在这种情况下,如何从最后附加的数据报或以其他方式读取
while
循环中的数据?

请参阅:必须读取所有挂起的数据报,才能再次触发信号。至于消息顺序,它们是以先进先出的方式读取的。很明显,由于它是UDP,所以不能依赖这样的顺序来确保内容排序。