シンプルなスレッド TCP サーバーを作成しています (スレッド化された Fortune サーバーの例に基づいています)。readCommand スロットに readyRead シグナルを接続し、サーバーに telnet で接続して文字列を送信した後に readCommand 関数が起動することを確認しました (Enter キーが続きます)。
以下の関数は、文字列 HELLO を送信すると "In readCommand" を出力し、出力 "new inBuffer" には常に空 ("") が表示されます。
void FortuneThread::readCommand()
{
qDebug() << "in readCommand" << endl;
QDataStream in(tcpSocketPtr);
in.setVersion(QDataStream::Qt_4_0);
in >> inBuffer;
qDebug() << "new inBuffer: " << inBuffer << endl;
...
}
tcpSocket->bytesAvailable() を出力すると、telnet 経由で送信する文字数が増えるのがわかります。私はそれらをソケットから取り出していません...上記のコードはFortune Clientの例からコピーしたものなので、うまくいくと思いました。QDataStream を間違って使用していますか?