我正在創建一個簡單的線程化TCP服務器(基於Fortune服務器線程示例)。我已將readyRead信號連接到readCommand插槽,並確認readCommand函數在telnet到我的服務器併發送字符串(後跟enter)後觸發。從QTcpSocket讀取時的空緩衝區
下面的函數在發送字符串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是否錯誤?
我不知道米歇爾,但你爲什麼要使用「QDataStream :: Qt_4_0" 。你正在使用哪個Qt版本?另外,tcp socket是FortuneThread的一個類成員嗎? – lpapp
發送數據時是否看到正確的長度,而不是檢查其是否正在增長? – lpapp
我直接從他們的例子中複製了Qt_4_0 ...但我不認爲這很重要,因爲另一端(客戶端)不是編碼,只是通過telnet發送字符。如果我從telnet客戶端連接,輸入HELLO並輸入,字節數將增長到7(我認爲這意味着我的客戶端發送了/ n/r,或者最後可能是空值?)。 – TSG