私は現在、サーバー (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);
}
}