我正在通过UDP将非压缩的图像(bmp)数据从一种应用程序(unity)发送到另一种应用程序(QT),将数据分为多个帧(每个帧大小为50Kb)并添加帧ID。
在另一端,我尝试使用帧ID整合这些帧,并在收集完一个图像的所有帧之后将其作为图像进行处理。
如果我只是捕获这些帧而不进行处理,则可以按正确的顺序获取数据。
void Server::readPendingDatagrams()
{
if (udpSocket->hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());
QHostAddress sender;
quint16 senderPort;
udpSocket->readDatagram(datagram.data(), datagram.size(),
&sender, &senderPort);
qDebug()<<datagram[0]; //frameId
//processTheDatagram(datagram);
}
}
我在控制台看到了"1 2 3 4 5 1 2 3 4 5 1 2 3 4 5",但是如果我取消注释processTheDatagram(datagram); 我会得到"1 3 4 1 2 4 2 4 5 2 3 5",在处理之前的数据报时会丢失数据。 问题出在哪里?是在udp缓冲区中吗?
processTheDatagram
函数的代码吗? - David van rijn