Форум программистов, компьютерный форум CyberForum.ru

Решить проблему: простой веб сервер на основе boost::asio падает именно при первом же обращении к серверу - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Раздельная компиляция: как быть, если код не компилируется, так как два файла подключают друг друга? http://www.cyberforum.ru/cpp-beginners/thread1799498.html
Доброго времени суток. У меня есть какой-нибудь x.h: #include "y.h" class A { vector<B*> v; } и y.h:
C++ Неправильно отправляется Curl post Добрый день, помогите, пожалуйста, разобраться. На сервер приходят все null, и хедер тоже null. Последний пример взял с офф. сайта с примеров, всё равно null значения всех полей. CURL *curl; CURLcode res; struct WriteThis pooh; res = curl_global_init(CURL_GLOBAL_DEFAULT); if(res != CURLE_OK) { } struct curl_slist *headers=NULL; ... http://www.cyberforum.ru/cpp-beginners/thread1799487.html
C++ Программа, которая "переворачивает" последовательность положительных целых чисел
На вход подаются целые, положительные числа через пробел. Программа считывает их до тех пор, пока не встретит в последовательности 0. Т.е. 0 это остановка чтения. Цель - вывести эту последовательность в обратном порядке через пробел(0 не выводить). Ограничения: нельзя использовать циклы, массивы, строки, контейнеры. Есть подсказка: надо использовать рекурсию. Сама задача относится к теме...
Реализовать функцию без параметров, определяющую количество символов, отличных от пробела C++
Задача: Описать функцию next() без параметров, которая считывает с клавиатуры первый символ, отличный от пробела, и объявляет его своим значением. Использовать эту функцию для подсчета количества отличных от пробела символов вводимого текста. Код: #include <iostream> #include <string> using namespace std; int next(); int main()
C++ Нюансы синтаксиса: что означает запись for ( ; ; ) ? http://www.cyberforum.ru/cpp-beginners/thread1799471.html
Встретила в программе такую строку: for ( ; ; ) { // some code } Кто может объяснить по какому принципу она работает, не совсем понимаю. Гуглила - ничего похожего не смогла найти
C++ Qt Исправить ошибку: при использовании Qt библиотеки poppler и goostring программа неожиданно завершается Привет, не могу решить задачу. for (QString pdfFile : listPDFFiles) { GooString* gooPDFFileName = new GooString(pdfFile.toStdString().c_str()); ... // Использование gooString подробнее

Показать сообщение отдельно
sys_beginner
1 / 5 / 1
Регистрация: 10.06.2014
Сообщений: 484
27.08.2016, 19:06     Решить проблему: простой веб сервер на основе boost::asio падает именно при первом же обращении к серверу
Запускаю код указанный ниже, но при обращении на айпи и порт который слушает сервер, сервер падает (debug error, abord)
А браузер пишет 127.0.0.1 refused to connect.

Что я делаю не так? Программа слушает 2011 порт, обращаюсь из браузера так: 127.0.0.1:2011
Возвращаю корректный ответ клиенту по протоколу HTTP

До запроса к серверу он нормально живет и слушает порт 2011 (проверял). Падает именно при первом же обращении к серверу

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "stdafx.h"
#include <iostream>
#include <boost/asio/impl/src.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <boost/asio/write.hpp>
#include <boost/thread.hpp>
 
typedef boost::shared_ptr<boost::asio::ip::tcp::socket> socket_ptr;
 
std::string response = "HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\nContent-Length:2\r\n\r\n ok";
 
void client_session(socket_ptr sock)
{
   while (true)
   {
    char data[512];
    size_t len = sock->read_some(boost::asio::buffer(data));
    if (len > 0)
        boost::asio::write(*sock, boost::asio::buffer(response, sizeof(response)));//возвращаю ответ здесь
    }
}
 
int main()
{
   boost::asio::io_service service;
   boost::asio::ip::tcp::endpoint ep(boost::asio::ip::tcp::v4(), 2011);
   boost::asio::ip::tcp::acceptor acc(service, ep);
   while (true)
   {
    socket_ptr sock(new boost::asio::ip::tcp::socket(service));
    acc.accept(*sock);
    boost::thread(boost::bind(client_session, sock));
   }
 
    return 0;
}
Добавлено через 8 минут
Убрал while(true) в функции client_session, теперь страница отображается в браузере но возвращаемый ответ с сервера все равно не виден. Тело ответа пустое

Добавлено через 3 минуты
Ура! Теперь ответ возвращается. Нужно было вместо sizeof(response) написать response.length();
Но несмотря на то что запрос/ответ проходит успешно сервер все равно падает после первого обращения!
В чем может быть причина?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru