2012-10-30 43 views
0

我只是想在C++中實現一個簡單的Web服務器。爲此,根據請求,Web服務器從服務器獲取數據。爲此,我正在使用返回文件的數據從服務器到客戶端 - 註冊

int main() 
{ 
std::ifstream file("/home/chaitanya/cpp/net/hello"); 
int length; 
char *buffer; 

if(file.is_open()) 
{ 
    std::cout << "File is open\n"; 

    file.seekg(0, std::ios::end); 
    length = file.tellg();  
    file.seekg(0, std::ios::beg); 

    buffer = new char[length]; 

    file.read(buffer, length); 
    file.close(); 
} 

printf("Data:\n\n%s\n", buffer); 
delete[] buffer; 

return 0; 
} 

此工作正常小文件。即使我通過套接字發送整個文件數據,而不考慮它的大小。這是更好的方法嗎?

例如,如果文件大小很大?我想一次發送一個特定的數據塊會更好。

你們可以提出哪些方法是好的(或者)Web服務器使用的其他更好/更快的方法嗎?

在此先感謝。 :)

回答

1

幾乎在每個操作系統你有在linux發送文件通過套接字,例如一個更好的操作系統相關選項,您有sendfile,在Windows你有TransmitFile和......,但如果你想有一個簡單的便攜式解決方案,我會從std::ostream將數據發送到插座派生類,然後用這個:

my_socket_stream s; 
s << file.rdbuf() << std::flush; 

使用這種技術,我可以送多千兆字節的文件,沒有任何問題!

相關問題