我目前正在研究从服务器(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);
}
}