|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|||||||||||
Boost asio для начинающих05.06.2019, 19:55. Показов 15185. Ответов 30
Метки нет (Все метки)
Здравствуйте,
Пытаюсь разобраться с самым простым примером, как это все должно работать, как получить ip адрес и записать его в end point:
Или как то совершенно все по другому ?
0
|
|||||||||||
| 05.06.2019, 19:55 | |
|
Ответы с готовыми решениями:
30
Boost Asio для чайника Boost.asio Boost Asio C++ |
|
Неэпический
|
|
| 06.06.2019, 02:19 | |
|
1
|
|
|
79 / 60 / 19
Регистрация: 22.11.2015
Сообщений: 193
|
||
| 06.06.2019, 07:55 | ||
Сообщение было отмечено Optimus11 как решение
РешениеASIO предоставляет механизм абстракции для доступа к API операционных систем. Когда мы получаем объект boost::asio::io_context, то он инициализируется всеми необходимыми полями, для доступа к базовым механизмам ввода-вывода конкретной ОС. ip::tcp::resolver::iterator iter = resolver.resolve(query); призывает ОС выполнить для нас работу по определению всех доступных сетевых адресов хоста(собственно ОС использует собственную службу DNS для разрешения имени хоста). resolver возвращает указатель (полученный от API ОС) на область памяти (та область памяти, которая используется сетевыми компонентами конкретной ОС). ip::tcp::endpoint служит контейнером, для хранения сетевых реквизитов хоста (конечной точки). Дальше вопрос интересный. Скорее всего данные копируются в этот контейнер (но возможно, что хранятся лишь указатели). ip::tcp::endpoint имеет у себя "на борту" методы, с помощью которых можно извлечь необходимые данные. Например ep.address().to_string() вернет ip адрес хоста в удобной форме, то есть с типом std::string. ep.port() метод, вернёт номер порта (с типом unsigned int), на котором "крутится" необходимый сервис (для http и https порты 80 и 443 соответственно). В любом случае, асио лишь абстракция, под капотом у неё ,так или иначе, скрыты механизмы общения с подсистемами ввода-вывода конкретной ОС. То есть, приложение, использующее асио, в теории переносимое(может использовать API разных типов ОС).
1
|
||
|
79 / 60 / 19
Регистрация: 22.11.2015
Сообщений: 193
|
|
| 06.06.2019, 08:21 | |
|
Говоря о сетевых компонентах ОС, имеется в виду нечто похожее на ->
1
|
|
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|||||||||||||||||
| 06.06.2019, 20:54 [ТС] | |||||||||||||||||
|
1)
2)И если не сложно, подскажите:
Добавлено через 1 час 12 минут И позвольте пожалуйста еще один вопрос: Если сделать резолв хотя бы один раз:
1
|
|||||||||||||||||
|
79 / 60 / 19
Регистрация: 22.11.2015
Сообщений: 193
|
||||||
| 07.06.2019, 12:26 | ||||||
Мне импонирует Ваше явно выраженное стремление к познанию boost и asio конкретно. Вы молодец, как и многие прикладные программисты, использующие эту библиотеку. Есть спойлер, что в 2023 году в стандарт С++ войдет поддержка сетевого взаимодействия. И я даю 10 к 10, что это будет boost asio. И те, кто активно изучают "подкапотное пространство" asio, будут "на коне". Ведь уже сейчас есть библиотека boost::beast, основой которой есть boost::asio. Эта библиотека имеет просто ОГРОМНЫЙ багаж функционалки для работы с сетью на высоком уровне абстракции. Плюсом к этой библиотеке будет хорошая поддержка со стороны самого Винни Фалко. Так что ставлю Вам палец вверх, за изучение asio.
2
|
||||||
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|||
| 07.06.2019, 19:00 [ТС] | |||
|
Спасибо за обьяснение!
Выполнение кода закончилось, я выдергиваю патчкорд из сетевой платы, и опять запускаю код, и резолв каким то образом опять полусает ip адресса соответвующий имени запрашиваемого сайта. Вопрос как, если сети нет, откуда берется данные ip. Добавлено через 3 часа 8 минут
0
|
|||
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|||||||||||
| 11.06.2019, 20:00 [ТС] | |||||||||||
|
Здравствуйте,
В продолжении темы ![]() Позвольте такой вопрос: Чтобы не произошло ошибки, к примеру во время резолва не существующего доменного имени, к примеру: cyberforum1.ru В примере http запроса доабаляется обработчик исключений try/catch и еще несколько непонятных для меня по функционалу строк:
Вот я что-то сообразить ни как не могу
0
|
|||||||||||
|
79 / 60 / 19
Регистрация: 22.11.2015
Сообщений: 193
|
|||||||
| 12.06.2019, 20:31 | |||||||
|
Я перевожу документацию к boost (скоро будет доступна на сайте с кучей примеров и пояснениями), так вот: . Объект ввода-вывода (I/O object) выдает исключение типа boost::system::system_error, если операция не удалась. Если код для запуска операции был записан как:
1
|
|||||||
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
||||||||||||||||
| 19.06.2019, 19:44 [ТС] | ||||||||||||||||
|
Здравствуйте,
Извините, еще один вопросик ![]() 1)Вот есть простейший Get запрос:
Есть ли способ записать ответ в переменную, размер которой заранее не нужно определять ? 2)И не подскажите, что то не могу понять, для чего нужна функция:
0
|
||||||||||||||||
|
79 / 60 / 19
Регистрация: 22.11.2015
Сообщений: 193
|
|||
| 20.06.2019, 08:27 | |||
|
Тут вопрос сложный, данные могут приходить например, не последовательно. Как на принимающей стороне определить, что все данные получены и они нужного Вам типа? Представим, что я отправляю файл размером 5 Гб. При всем этом нужно учитывать, что пакеты на пути своего следования могут приходить в разной последовательности, теряться, задерживаться, иметь ошибки передачи. Подсистема сетевого взаимодействия ОС готовит данный для Вас, и вы посредством API(sockets) получаете эти данные в свое ПО. Если файл огромного размера, то ОС скорее всего будет выдавать Вам данные порциями. Узнать о порциях готовых к получению, можно в частности с помощью данной функции. Добавлено через 1 час 18 минут Давайте еще раз обратимся к такому вопросу, как буфер приема и передачи socet API ОС. Так как я подозреваю, что мы говорим о разных вещах. socet API ОС - это прослойка, между программами управления устройствами (NIC) и приложением пользователя. Драйверы устройств лежат в глубине ядра ОС, и socet API ОС предоставляет возможность с ними общаться. То есть это вторая или даже третья прослойка, так как сами драйверы тоже есть абстракция доступа управлением железяками ПК. Boost::Asio - это прослойка между socet API ОС и нашим ПО. И это удобно, так как (я считаю) с точки зрения прикладного программирования, "пилить" socet напрямую, неразумно и подвержено куче ошибок. Пусть этим занимаются разработчики библиотек, аля Boost. socet API ОС имеет свой буфер приема и отправки сообщений. На сколько мне известно, то сейчас он по дефолту равен 8192 байт. Есть статья, в которой описывают процесс задания буфера отправки сокета равным 0, при этом данные приложения начинают напрямую улетать в сеть без буферизации. Использовать такой подход крайне не рекомендуется, в виду снижения производительности. Принимая данные из сокета с помощью boost::buffer, мы всего лишь описываем то, какими порциями мы будем вычитывать данные из буфера сокета. Зачем нужен буфер сокета? Приемные буферы используются для хранения полученных данных, пока они не будут считаны приложением. В случае TCP доступное пространство в приемном буфере сокета — это окно, размер которого TCP сообщает другому концу соединения.
1
|
|||
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
||||||
| 20.06.2019, 09:14 [ТС] | ||||||
|
Огромное спасибо за такие подробные ответы!
Но, если буффер приема является желательным, но необязательным, то в функции read_some все равно присутвует переменная buff:
Тогда возникает вопрос, где же тогда хранится все полное сообщение, которое поишло от сервера по запросу и как его в итоге прочитать. Добавлено через 16 минут А, ну или, как Вы написали можно получить доступ ко вмему сообщению, которое пришло с сервера, которое хранится где то в буффере ОС с помщью функции - flat_buffer.(пока не успел прочитать про нее)
0
|
||||||
|
79 / 60 / 19
Регистрация: 22.11.2015
Сообщений: 193
|
||||
| 20.06.2019, 09:54 | ||||
|
1
|
||||
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
||||||||||||||||||||||||||
| 22.06.2019, 22:25 [ТС] | ||||||||||||||||||||||||||
2)И я хотел спросить, а есть ли принципиальная разница куда записывать посылаемый текст - или в стринг или в buffer/streambuf?
0
|
||||||||||||||||||||||||||
|
79 / 60 / 19
Регистрация: 22.11.2015
Сообщений: 193
|
||
| 23.06.2019, 15:23 | ||
|
1
|
||
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
||||||||||||||||
| 27.06.2019, 18:30 [ТС] | ||||||||||||||||
|
Что то непонятное:
Я не понимаю, что это за данные и почему они разные из раза в раз, и почему они разные в пределах выполнения одного кода. PS:Причем текст ответа от сервера тоже разный получается
0
|
||||||||||||||||
|
79 / 60 / 19
Регистрация: 22.11.2015
Сообщений: 193
|
||||||
| 27.06.2019, 18:46 | ||||||
|
Попробуйте вот это:
1
|
||||||
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|
| 27.06.2019, 20:27 [ТС] | |
|
Мистика, как это все работает
0
|
|
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|
| 28.06.2019, 13:50 [ТС] | |
|
А как вообще комманды read/read_some понимают, что они прочитали всё входящее сообщение(входящие биты) от сервера и что можно завершить чтение и перейти к выполнению следующей строчки кода ?
С read_until понятно читает до заданного символа, а с этими коммандами не понятно.
0
|
|
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|
| 01.07.2019, 18:21 [ТС] | |
|
Подскажите, а в чем принципиальная разница между отправкой/получения файла и просто передачей информации, ну того же html текста ?
0
|
|
| 01.07.2019, 18:21 | |
|
Помогаю со студенческими работами здесь
20
boost/asio boost::asio пример Winsock vs boost::asio Boost asio + qt (slots) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|