2

シンプルなスレッド 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 を間違って使用していますか?

4

2 に答える 2