1

読み取りに使用できるバイト数を検出したい:

while( socket->ConnectedState == QTcpSocket::ConnectedState ) {
    if(socket->bytesAvailable() > 0)
        qDebug("%d", test->bytesAvailable());
}

ソケットが接続されていることは確かですがbyteAvailable、相手から何バイト書き込んでも の戻り値は常に 0 のようです。

しかし、切断後に検出すると:

if (! socket->waitForDisconnected(-1)) {
        qDebug("Failed to receive disconnect message from client");
    }
    else {
        qDebug("%d", socket->bytesAvailable());
        qDebug(socket->readAll());
        qDebug("Disconnected from client");
    }
}  

デバッグ ウィンドウに送信される情報は適切です: 8 ABCDEFGH.

これが起こる原因は何ですか?

PS:
相手側から切断した後も実行し続けるため、これもデッド ループのようです。この理由による可能性があります: QTcpSocket 状態は常に接続されており、イーサネット ワイヤを抜いても

4

1 に答える 1

0

ソケットに読み取るデータがある場合に通知する readyRead() シグナルが既にあります。なぜ while ループを使用しているのですか?

また、バッファのサイズと実際のバッファをソケットに書き込むこともできます。次に、反対側で読み取り中に、最初に #of バイトを読み取り、次に次のようにバッファーを読み取ります。

qint64 QIODevice::read ( char * data, qint64 maxSize ). 
于 2013-06-04T19:02:40.470 に答える