【发布时间】:2011-05-06 23:37:21
【问题描述】:
我正在制作自己的简单网络服务器,我已经获得了可以完美发送的文本文件和 html 文件,但是当我尝试发送图像时,我遇到了一些问题,我无法弄清楚。
这就是我所拥有的。我知道一次发送一个字节效率低下,但它是用于测试的。
char buffer[1];
send_header(new_fd, get_file_type(file_location));
ifstream file;
file.open(temp.c_str(), ios::out | ios::binary);
while (file.good())
{
file.read(buffer, sizeof(buffer));
send(new_fd, buffer, strlen(buffer), 0);
}
有什么想法吗?发送前需要转换成网络字节序吗?
谢谢!
【问题讨论】:
-
另外,如果您要坚持使用这种方法,您应该将缓冲区定义为 4096 字节。使用 1 字节缓冲区将导致大量系统调用,这将大大降低服务器速度。
-
如果你真的想硬核,你可以手动mmap() 文件,然后同时writev() 头文件和文件。 BSD 的 sendfile() 为你做这件事; Linux 相当有限,因此您必须自己调用 mmap()/writev()。
-
@cdhowie,哈哈,我知道我在用它来测试一些东西,我把它切换到 1024,因为它甚至无法在你的解决方案中正常工作,它设置为 1。