如何使用QUdpSocket接收大量数据?



我使用QUdpSocket接收数据,对方在很短的时间内发送了8000个UDP数据报,每个数据报包含1024字节的数据

我的QT代码是这样实现的

connect(udp_socket, SIGNAL(readyRead()), this, SLOT(ReceiveUdp()));
void MainWindow::ReceiveUdp()
{
QHostAddress sender;
uint16_t port;
QByteArray datagram;
int datagram_len;

while (udp_socket->hasPendingDatagrams())
{
datagram_len = udp_socket->pendingDatagramSize();
datagram.resize(datagram_len);
udp_socket->readDatagram(datagram.data(), datagram.size(), &sender, &port);
temp_udp_data.append(datagram);
}
}

但是我不能完全接收到8000个数据报,只有500个左右,我该怎么办?

我试图使用setReadBufferSize函数,但根据QT的手册,setReadBufferSize只适用于QTcpSocket,而不是QUdpSocket,我没有得到一个好的结果

使用

udp_socket->setSocketOption(QAbstractSocket::ReceiveBufferSizeSocketOption, QVariant(1024 * 8000));

我可以接收到完整的8000个数据报,但我在另一个线程中接收,udp_socket的readyRead信号被绑定到UDP接收线程的start(),但奇怪的是,我不能在第一次接收第二次接收后进行第二次接收。

我已经重写了一个基于WinSock2和多线程的动态库,它可以更好地工作

相关内容

  • 没有找到相关文章

最新更新