readyReadスロットを使用せずにQTcpSocketを使用することは可能ですか?
TCPサーバーからデータを読み取るためにこのコードを試しました:
QByteArray ba;
forever
{
sck.waitForReadyRead();
ba.append( sck.readAll() );
if (sck.bytesAvailable() == 0)
break;
}
しかし、サーバーからすべてのデータを受信しないことがあります!?
readyReadスロットを使用せずにQTcpSocketを使用することは可能ですか?
TCPサーバーからデータを読み取るためにこのコードを試しました:
QByteArray ba;
forever
{
sck.waitForReadyRead();
ba.append( sck.readAll() );
if (sck.bytesAvailable() == 0)
break;
}
しかし、サーバーからすべてのデータを受信しないことがあります!?
はい、可能です。TCP はストリーム指向であり、そのような繰り返しから抜け出すことはできません。QAbstractSocketのドキュメントに例があります。
ご覧のとおり、接続が閉じられる ( waitForReadyRead () メソッドが false を返す) まで、または何らかの終了シーケンスを送信するまで読み取りを続ける必要があります。