我想在C++中開發一個小型的Web服務器,但是當我嘗試讀取圖像文件並將其寫入套接字緩衝區時出現問題。 我發現了一個用C編寫的類似函數,它完美地工作,我不明白爲什麼我的方法不起作用,當我通過瀏覽器連接到服務器並打開一個圖像文件時,我得到了這個輸出。讀取圖像文件C++並將其放在套接字上
「圖像」http://127.0.0.1:7777/myimage.jpg「無法顯示,因爲它包含錯誤。」
這是我的方法:
std::string
Client::getFileContent(const std::string& name)
{
std::ifstream f; f.open(name.c_str(), std::ios::binary);
if(!f.is_open()) {
return (std::string(""));
} else {
f.seekg(0, std::ios::end);
unsigned int length = f.tellg();
f.seekg(0, std::ios::beg);
char* buffer = new char[length];
f.read(buffer, length);
f.close();
return (std::string(buffer));
}
}
然後,我把它寫在一個套接字緩衝區(使用NSPR插座):
void
Socket::send(const std::string& s)
{
if(PR_Send(sock, s.c_str(), s.length(), 0, PR_INTERVAL_NO_WAIT) == -1) {
throw (Exception::Exception(Exception::Exception::SOCKET_SEND));
}
}
這是我在網絡上找到的功能,我不能明白爲什麼這個完美的作品和我不工作OO:
while ((ret = read(file_fd, buffer, BUFSIZE)) > 0) {
(void)write(fd,buffer,ret);
非常感謝你:)
您應該使用['的sendfile(2)'](http://linux.die.net/man/2/sendfile),用於在發送文件套接字來代替 - 它更有效率,因爲它不需要在內核和用戶空間之間來回處理所有文件數據。 –