我使用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和多线程的动态库,它可以更好地工作