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;
}

这适用于小文件。即使我通过套接字发送整个文件数据,无论其大小如何。这是更好的方法吗?

例如,如果文件大小很大?我想一次发送一个特定的数据块会更好。

你们可以建议哪种方法更好(或)网络服务器使用的任何其他更好/更快的方法吗?

提前致谢。:)

4

1 回答 1

1

几乎在每个操作系统中,您都有一个更好的操作系统相关选项来通过套接字发送文件,例如在linux您有sendfile、在Windows您有TransmitFile和...中,但如果您想要一个简单的便携式解决方案,我将推导出一个从std::ostream那个发送数据到套接字的类,然后使用它:

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

使用这种技术,我可以毫无问题地发送数千兆字节的文件!

于 2012-10-30T19:21:30.597 回答