2010-08-10 27 views
2

我正在使用C++套接字。該程序只需要一個HTTP頁面,將其讀入緩衝區buf[512],然後顯示緩衝區。但是,頁面可以包含比緩衝區更多的數據,因此如果沒有剩餘空間,它將被切斷。我可以使緩衝區大小更大,但這看起來不是一個好的解決方案。這是我正在使用的代碼:我應該在C++中使用什麼作爲緩衝區來接收來自網絡套接字的數據?

char buf[512]; 
int byte_count = recv(sockfd, buf, sizeof(buf), 0); 

什麼是將C++中的char數組用作緩衝區的替代方法?

+1

由於這是一個HTTP請求,頁面大小可能包含在標題信息中。如果你可以檢索到你可以動態分配內存(使用std :: vector )來保存整個頁面。請注意,僅僅因爲Web服務器發送了200個字節並不意味着您將在一個塊中接收它們。允許傳輸將其分解爲更小的塊,並且應該循環直到recv()返回0或錯誤代碼。 – 2010-08-10 16:01:52

回答

2

取決於你打算用數據做什麼。如果你只是想把它轉儲到輸出流中,那麼正確的做法是做你正在做的事情,但是在循環中做,直到沒有更多的數據要讀取爲止,在每個數據流之後將緩衝器寫入輸出流讀。

1

基本上沒有一個 - 使用recv時,您需要重複調​​用它直到它讀取了所有輸入。你當然可以使用支持增長緩衝區的更高級套接字庫,但對於普通的舊recv(),你需要一個n數組的char(或者char的向量)。

您可以將讀取到一個動態緩衝區中的數據的過程中添加,如字符串:

string page; 
while(len = recv(...)) { 
    page.append(buf, len); 
} 
相關問題