我有下面的代碼,從一個讀取與QTcpSocket:如何正確確定在QTCPSocket中已達到輸入結束?
QString request;
while(pSocket->waitForReadyRead())
{
request.append(pSocket->readAll());
}
這段代碼的問題是,它讀取所有的輸入,然後在最後30秒暫停。 (這是默認超時。)
什麼是避免長時間超時並檢測到輸入已達到結束的正確方法? (避免信號的答案是首選,因爲這應該是在一個線程中同步發生的。)
嗯,這是一個HTTP請求處理程序,所以發送「Content-length」頭的任何HTTP請求都將很容易處理。 – 2010-10-27 05:08:43
您還需要添加一些超時,因爲如果有人會攻擊您的服務,它可能會發送內容長度,並且不發送任何數據。我覺得30秒超時很多。也許你應該像嘗試5次超時重試3次,並假設連接中斷 – 2010-10-27 07:56:28
+1這是正確的答案。這是TCP,一個流媒體協議。您必須解釋流,以確定輸入是否已完全傳輸。 – andref 2010-10-28 20:06:55