1

我正在使用QT。我需要广播数据,所以我尝试使用QUdpSocket. 但数据可能太大(writeDatagram QUdpSocket::error返回后DatagramTooLargeError)。所以我拆分数据并writeDatagram多次调用这些部分。但是Received socket只接收一次数据,只有第一个数据包。接收代码是

connect(&m_socketReceiver, &QUdpSocket::readyRead, this, &LocalNetSharing::onDataRead);

void LocalNetSharing::onDataRead()
{
while (m_socketReceiver.hasPendingDatagrams())
{
    QByteArray datagram;
    datagram.resize(m_socketReceiver.pendingDatagramSize());

    m_socketReceiver.readDatagram(datagram.data(), datagram.size());
    //process data
}
}
4

1 回答 1

1

来自关于QUdpSocketClass 的 Qt 文档:

注意:当您收到 readyRead() 信号时,应读取传入的数据报,否则将不会为下一个数据报发出此信号。

因此,您似乎没有在每次调用onDataRead.

您没有在readDatagram. 我不确定这是否是原因,但正确的形式是:

while (m_socketReceiver.hasPendingDatagrams())
{
     QByteArray datagram;
     datagram.resize(m_socketReceiver.pendingDatagramSize());
     m_socketReceiver.readDatagram(datagram.data(), datagram.size(), host, &port);
     //process data
}
于 2014-06-19T04:42:51.723 回答