我寫了兩個簡單的程序服務器和一個使用C++(Linux)中的套接字的客戶機。最初它是一個示例客戶端 - 服務器應用程序(回顯消息發送和接收答案)。接下來,我更改了客戶端以實現HTTP GET(現在我不再使用我的示例服務器)。它可以工作,但是無論我設置了什麼緩衝區大小,客戶端都只能收到1440字節。我想要整個頁面進入緩衝區。我認爲這與TCP屬性有關,我應該在客戶端代碼中實現某種循環來捕獲答案的所有部分。但我不知道我該做什麼。如何通過套接字接收1440多個
這是我的代碼:
...
int bytesSent = send(sock, tmpCharArr, message.size()+1, 0);
// Wait for the answer. Receive it into the buffer defined.
int bytesRecieved = recv(sock, resultBuf, 2048*100, 0);
...
2048 * 100是一個緩衝區的大小,我覺得這是綽綽有餘了用於測試的相對較小的網頁更多。但正如我所提到的,我只收到1440字節。
當服務器的響應大於1440字節時,我可以用recv()函數調用來捕獲所有回覆「部分」?
在此先感謝。
是的,其實我預料到了這一點。但是,我怎麼知道我應該多少次調用recv()? – 2011-05-21 06:33:46
@ danny_23:直到你有足夠的數據。在web服務器的情況下,它會傳遞給你一個內容長度的頭部,它告訴你何時停止讀取正文,或者在完成時會關閉套接字,在這種情況下,直到'recv()'返回零。 – 2011-05-21 06:36:29
@ danny_23:反覆直到客戶告訴你他們已經完成。 – Johnsyweb 2011-05-21 06:36:56