QtUDPSocket:了解ReadyRead()信号处理

时间:2015-03-14 20:52:16

标签: c++ qt sockets udp

QUdpSocket数据报的官方QT文档中有一个example

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);
    }
}

readyRead()信号发出时,我正试图了解究竟发生了什么。在while循环中(在Server::readPendingDatagrams()槽中)我们读取了可用的数据报,但是如果新数据报附加到套接字会发生什么,而我们仍然读取以前的数据报批处理? readyRead()信号会再次发出?但是,在这种情况下,while循环将如何读取数据 - 从上一个附加数据报或其他方式?

0 个答案:

没有答案