我目前正在研究从服务器(LINUX 服务器)接收数据包的 Qt GUI 应用程序。
在正常情况下,它工作正常,但是当服务器在套接字上写入大量数据包时,客户端套接字进入循环以处理该数据,但最后剩下 8 个额外字节不属于我的应用程序和应用程序永远不要从使我的应用程序无响应的循环中出来。我正在接收所有数据而没有任何损失。
我的代码会更清楚一点:
connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(receiveData()));
void MyClass::receiveData()
{
char recvbuf[MAXPACKET]; // MAXPACKET = 4096
char* packet = 0;
int bytesAvailable = 0;
int bufSize = MAXPACKET;
while((bytesAvailable > 0) || tcpSocket ->bytesAvailable())
{
if (bytesAvailable == 0 && tcpSocket ->bytesAvailable())
{
qint64 requestBytes = bufSize - bytesAvailable;
bytes = tcpSocket->read(recvbuf + bytesAvailable, requestBytes);
bytesAvailable += bytes;
}
//createPAcket and process Packets method works here
if (packet)
processPacket(packet);
}
}