1

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

0 に答える 0