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

Pie*_*ces 1 c++ linux webserver image

我正在制作我自己的简单网络服务器,我已经完成了文本文件和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);
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

cdh*_*wie 6

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

编辑:您可以通过以下方式获得ifstream.gcount()- 所以只需更换您的strlen电话,file.gcount()一切都应该神奇地工作.


chr*_*ock 6

@cdhowie是strlen()罪魁祸首.但是,如果你真的想要"现代"考虑使用sendfile().它将mmap()是您要为您发送的文件.

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