使用Qt套接字广播大数据

时间:2014-06-18 18:48:04

标签: c++ qt sockets udp qudpsocket

我正在使用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
}
}

1 个答案:

答案 0 :(得分:1)

关于QUdpSocket类的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
}