Я пишу свой небольшой http-сервер в учебных целях.У меня есть две реализации ответа на статический запрос, идентичные по смыслу, просто в одной из них дейсвия разложены по функциям. Но в реализации которую я хочу заменить, после вызова функции send браузеру приходит ответ и колесико подгрузки перестает крутиться, а в новой - приходит ответ, но продолжает что то подгружатьсь. Почему так происходит? Еще нужно добавить, что во втором(нормально работающем) случае приходит запрос на favicon.ico, а в первом нет, отправляемые заголовки идентичны.
Код, при работе которого браузер продолжает подгружать:
std::string buffer; // создаем буфер в который будем формировать сообщение, отправляемое браузеру
std::ifstream file(getenv("path") + parser->get_file()); // открываем читаемый файл, скливая переменную окружения "путь" и имя файла
if (file) // если файл открылся, продолжаем
{
while(!file.eof())// читаем построчно в буфер пока не дойдем до конца
{
std::string temp;
std::getline(file, temp);
buffer = buffer + temp;
}
heading head(buffer.length(), parser->get_file()); // этот класс формирует заголовок
buffer = head.get_head() + buffer; // приклеиваем полученный заголовок к буферу
file.close();
send(newclient->get_client(), buffer.c_str(), buffer.length(), 0); // отправляем полученный буфер браузеру
}
else
{
send(newclient->get_client(), heading::error404().c_str(), heading::error404().length(), 0);
}
работающий старый код:
std::string MSGbuffer, head;
head = "HTTP/1.1 200 OK\r\n";
std::string head1 = "Content-Type: text/html\r\n";
std::ifstream fin;
fin.open("/home/anton/test.html");
while(!fin.eof())
{
std::string temp;
std::getline(fin, temp);
MSGbuffer = MSGbuffer + temp;
}
std::string head2 ="Content-Length: " + std::to_string(MSGbuffer.length()) + "\n\n";
MSGbuffer = head + head1 + head2 + MSGbuffer;
std::cout << head;
std::cout << head1;
std::cout << head2;
fin.close();
send(client_d, MSGbuffer.c_str(), MSGbuffer.length(), 0);
Отличия только в том, что в новом варианте,заголовок формирует отдельный класс и пути указываются не в ручну.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
По нажатию на кнопку из пункта меню, происходит сначала вызов прогресс бара по истечению 5 секунд переход на диалоговое окноПопытался сделать...
Пишу программу-шутника, который будет менять изображение рабочего стола: В одной из строчек кода возникла ошибка:
Два массива разного размера передаём в функцию для дальнейшей обработки