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