C ++中的Webserver,如何发送图像

时间:2010-11-09 00:53:41

标签: c++ linux image webserver

我正在创建自己的简单网络服务器,我已经完成了文本文件和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);
}

有什么想法吗?在发送之前,是否需要将其转换为网络字节顺序?

谢谢!

2 个答案:

答案 0 :(得分:6)

strlen(buffer)将计入第一个空字符('\0'),这是图像数据中非常常见的字节。相反,您需要确定实际读取的字节数(ifstream.read()不提供此信息),并使用它代替strlen调用。

编辑:您可以使用ifstream.gcount()获取此信息 - 所以只需将strlen来电替换为file.gcount(),一切都应该神奇地发挥作用。

答案 1 :(得分:6)

@cdhowie关于strlen()是罪魁祸首。但是,如果您真的想要“现代”,请考虑使用sendfile()。它将mmap()您要为您发送的文件。

使用sendfile()会阻止您将文件读入临时内存,只会将其发送给其他收件人。它不仅可以节省步骤,还可以减少真正大文件(例如图像)的页面错误。