我有一個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'字符處結束,所以你的代碼對於文本文件可以正常工作,但會在二進制文件中窒息。 –
所以我應該讀它作爲一個文本文件? –
不!作爲一個二進制文件,進入一個內存塊,在您發送所需的頭文件後,它將直接傳遞到輸出套接字。 –