我有一个C++ linux服务器,带有基本的服务器套接字。下面是我使用的服务器png图片内容:在C++服务器上提供图像
string ms = "HTTP/1.0 200 OK\r\nContent-type: image/png\r\n\r\n";
ifstream myfile("xampl.png", ios::in|ios::binary|ios::ate);
string line;
char* memblock;
streampos size;
if(myfile.is_open()){
size = myfile.tellg();
memblock = new char [size];
myfile.seekg (0, ios::beg);
myfile.read (memblock, size);
myfile.close();
}
ms.append(string(memblock));
cout << "\"" << ms << "\"" << endl;
char* msg = new char[ms.size()+1];
copy(ms.begin(), ms.end(), msg);
msg[ms.size()] = '\0';
int len;
ssize_t bytes_sent;
len = strlen(msg);
bytes_sent = send(new_sd, msg, len, 0);
我知道我尝试读取PNG文件作为二进制文件,但我不知道做什么。当我telnet到这个服务器时,我得到了一个奇怪的字符,这让我相信我已经服务过这个文件,但是当我在浏览器中查看它时,我在所有浏览器中都找到了图像未找到的图标。请帮助...
转储文件到一个MEM块,然后到一个字符串,然后到一个C字符串不仅是一个复杂的做事方式,它也是越野车。 C字符串将在遇到的第一个'\ 0'字符处结束,所以你的代码对于文本文件可以正常工作,但会在二进制文件中窒息。 –
所以我应该读它作为一个文本文件? –
不!作为一个二进制文件,进入一个内存块,在您发送所需的头文件后,它将直接传递到输出套接字。 –