Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/10: Рейтинг темы: голосов - 10, средняя оценка - 4.90
25 / 25 / 14
Регистрация: 05.05.2014
Сообщений: 115

Boost asio [время ожидания ответа]

31.05.2014, 23:44. Показов 2293. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, делаю синхронный запрос на сервер:
C++
1
response = get_html_data(request, host, delim);
Есть ли возможность вписать сюда какой-нибудь параметр, чтобы ответ ждался не до победного (delim), а например 5 секунд подождал - не получил данные или не дошёл до delim - отключился и пошёл дальше выполнять код.
Интересует именно синхронный вариант. а то бывает происходит сбой в сети и программа ждёт ответа. вечно.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.05.2014, 23:44
Ответы с готовыми решениями:

Boost.asio
Добрый день. Я только начал знакомство с boost.asio и при использовании примеров с офф.сайта никак не могу разобраться в их работе. Вот...

boost/asio
Кто тестил asio в Вuilder-е? Код использовал отсюда https://www.cyberforum.ru/cpp-beginners/thread329576.html И напоролся сразу...

Boost Asio C++
Добрый день. Юзаю этот ( http://www.boost.org/ ) проект. Нужна помощь с документаций...

6
 Аватар для Crast
72 / 72 / 5
Регистрация: 10.02.2013
Сообщений: 434
01.06.2014, 00:15
Цитата Сообщение от srin Посмотреть сообщение
get_html_data
Очевидно это не asio.
В asio есть
boost::asio::read_untill.
Чтобы ограничить время нужно реализовать асинхронное ожидание по таймерам.
Хотя я до конца не понимаю - почему асинхронный вариант не интересует?

Добавлено через 12 минут
Цитата Сообщение от srin Посмотреть сообщение
5 секунд подождал - не получил данные или не дошёл до delim - отключился и пошёл дальше выполнять код
5 секунд это вечность.
0
25 / 25 / 14
Регистрация: 05.05.2014
Сообщений: 115
01.06.2014, 00:38  [ТС]
блин, лопух я. досиделся уже за компьютером ))))
get_htm_data - это у меня подпрограмма.
действительно read_until. вот строка запроса:
C++
1
boost::asio::read_until(asio_socket, res_buf, delim_buf);
2. это надо изучать как его реализовать в asio. хотелось бы обойтись меньшей кровью.

3. смотря для каких целей. ну а мне для выдирания html 5 секунд (или даже 10) очень даже устроют.
0
 Аватар для Crast
72 / 72 / 5
Регистрация: 10.02.2013
Сообщений: 434
01.06.2014, 05:45
Тогда лови быдлокод, который выводит заголовок этой страницы.
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
37
38
39
40
41
42
43
44
45
46
47
48
#include <boost/asio.hpp>
 
using namespace boost::asio::ip;
 
int main()
{
    boost::asio::io_service ios;
    tcp::resolver resolver(ios);
 
    tcp::resolver::query query("cyberforum.ru", "http");
    tcp::resolver::iterator beg = resolver.resolve(query);
    tcp::resolver::iterator end;
    tcp::socket socket(ios);
 
#define HANDL(ec)   if (ec){ std::cerr << ec.message() << std::endl; exit(1); }
    
    while (beg != end)
    {
        tcp::endpoint ep = *beg; beg++;
        std::cerr << ep << std::endl;
 
 
        boost::system::error_code ec;
        boost::asio::streambuf ss;
 
        socket.close();
        socket.connect(ep, ec);
        HANDL(ec);
 
        std::ostream os(&ss);
        os << "GET /boost-cpp/thread1195075.html HTTP/1.1\r\n"
            << "Client: boost-asio some\r\n"
            << "Accept: deflate\r\n"
            << "\r\n";
 
        socket.write_some(ss.data(), ec);
        HANDL(ec);
 
        ss.consume(ss.size());
 
        boost::asio::read_until(socket, ss, "\r\n\r\n");
 
        const char* s = boost::asio::buffer_cast<const char*>(ss.data());
        std::cerr << s << std::endl;
    }
 
 
}
P.S.: Используй асинхронное. В соотвествующей теме F.A.Q. есть раздел, где в синхронном коде ошибка. За 3 года на ошибку пожаловался только один человек. Хороший пример того, насколько программисты считают важным синхронный способ передачи в asio

Добавлено через 34 секунды
P.P.S.: Да и read_until читает чуть больше чем надо.
1
25 / 25 / 14
Регистрация: 05.05.2014
Сообщений: 115
01.06.2014, 13:22  [ТС]
Спасибо за код. не проверял.
Вроде сам разобрался при помощи try...catch. Запись в логе:
Error Get HTML Data: read_until: Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера
к сожалению в логе не делал указание времени событий, но по предварительным подсчётам read_until ждёт ответа <10 секунд, что в целом меня устраивает.

Цитата Сообщение от Crast Посмотреть сообщение
P.P.S.: Да и read_until читает чуть больше чем надо.
кстати да, я тоже заметил, если при помощи delim выдирать не полностью весь html файл, а часть, то читается больше чем delim. Но у меня был ещё один код: когда читал не до delim, а по обработке ошибкок при чтении. Так там от сервера в одном ответе приходило два. "заголовок ответа 200 OK + вся страница + заголовок 404 not found".
0
 Аватар для Crast
72 / 72 / 5
Регистрация: 10.02.2013
Сообщений: 434
01.06.2014, 13:24
srin, можешь показать исходный код твоей функции. Если тебе еще нужна помощь конечно.
И к чему ты обращался, что приходило 2 заголовка?
0
25 / 25 / 14
Регистрация: 05.05.2014
Сообщений: 115
01.06.2014, 13:36  [ТС]
1. спасибо, уже не надо. а так, обычный код с примеров boost asio. только немного переделал строку запросов и убрал лишнее (кстати, если бы не убрал и try... catch из этого примера, то данного вопроса и не возникло бы).

2. делал запрос http страницы. только без параметра delim, а там с параметром ожидания ошибки при read_until (не помню ни код, ни где его брал.) и вот приходил такой ответ, как я написал ранее. видно читал ответ пока ошибка не произошла.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.06.2014, 13:36
Помогаю со студенческими работами здесь

boost::asio
начал ковырять буст. Возник вопрос с созданием клинт-серверного приложения. Для ознакомления хочу посмотреть простой пример, где сервер...

Boost.Asio не соединяется
Здравствуйте форумчане, недавно начал изучать boost.asio Скомпилил из примеров Server Client, запускаю так *.exe 127.0.0.1 13 это клиент...

boost::asio cессии
Здравствуйте. Хотелось бы узнать ответ на вопрос, который не где не нашол. Сервер реализован на Boost:asio, к нему подключаются клиенты,...

C++ | boost::asio + ssl?
Доброго времени суток! Хотелось бы узнать как подключаться по SSL? int main() { boost::asio::ip::tcp::iostream stream; ...

boost::asio пример
Привет! Можно, пожалуйста, простейший пример работы с boost::asio - клиент-серверная программа, клиент которой должен отсылать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru