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

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

31.05.2014, 23:44. Показов 2250. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru