Прочитайте файл образа C++ и поместите его в сокет
Я пытаюсь разработать небольшой веб-сервер на 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);
Большое спасибо:)
1 ответ
Ваша проблема здесь:
return ( std::string(buffer) );
Создание строки из char *
остановится на первом 0 байте, в то время как изображение может содержать много. вместо возврата строки верните vector<char>
лайк
return std::vector<char>(buffer, buffer + length);