Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/21: Рейтинг темы: голосов - 21, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 22

Boost::asio::ip::udp::socket bind а мне нужен не локальный хост

01.05.2018, 17:03. Показов 4743. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Пытаюсь наладить для своих нужд пример
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <iostream>
#include <string>
#include <boost/asio.hpp>
#include "boost/bind.hpp"
 
const int multicast_port = 30001;
 
class receiver
{
public:
    receiver(boost::asio::io_context& io_context,
        const boost::asio::ip::address& listen_address,
        const boost::asio::ip::address& multicast_address)
        : socket_(io_context)
    {
        // Create the socket so that multiple may be bound to the same address.
        boost::asio::ip::udp::endpoint listen_endpoint(
            listen_address, multicast_port);
        socket_.open(listen_endpoint.protocol());
        socket_.set_option(boost::asio::ip::udp::socket::reuse_address(true));
        socket_.bind(listen_endpoint);
 
        // Join the multicast group.
        socket_.set_option(
            boost::asio::ip::multicast::join_group(multicast_address));
 
        socket_.async_receive_from(
            boost::asio::buffer(data_, max_length), sender_endpoint_,
            boost::bind(&receiver::handle_receive_from, this,
                boost::asio::placeholders::error,
                boost::asio::placeholders::bytes_transferred));
    }
 
    void handle_receive_from(const boost::system::error_code& error,
        size_t bytes_recvd)
    {
        if (!error)
        {
            std::cout.write(data_, bytes_recvd);
            std::cout.write(data_, bytes_recvd);
            std::cout << std::endl;
            socket_.async_receive_from(
                boost::asio::buffer(data_, max_length), sender_endpoint_,
                boost::bind(&receiver::handle_receive_from, this,
                    boost::asio::placeholders::error,
                    boost::asio::placeholders::bytes_transferred));
        }
    }
 
private:
    boost::asio::ip::udp::socket socket_;
    boost::asio::ip::udp::endpoint sender_endpoint_;
    enum { max_length = 500000 };
    char data_[max_length];
};
 
int main(int argc, char* argv[])
{
    try
    {
        /*if (argc != 3)
        {
            std::cerr << "Usage: receiver <listen_address> <multicast_address>\n";
            std::cerr << "  For IPv4, try:\n";
            std::cerr << "    receiver 0.0.0.0 239.255.0.1\n";
            std::cerr << "  For IPv6, try:\n";
            std::cerr << "    receiver 0::0 ff31::8000:1234\n";
            return 1;
        }*/
        argc = 3;   
        argv[2] = "мой ип вида 201,140,20,10";
        argv[1] ="мой ип";
 
        boost::asio::io_context io_context;
        receiver r(io_context,
            boost::asio::ip::make_address(argv[1]),
            boost::asio::ip::make_address(argv[2]));
        io_context.run();
    }
    catch (std::exception& e)
    {
        std::cerr << "Exception: " << e.what() << "\n";
    }
    return 0;
}
С их примером sendera успешно запускаю. Но вот нужные мне адреcа в интете не проходят получаю ошибку Требуемый адрес для своего контекста неверен
У меня точно белый-статичный Ip. Брендмауер винодовс 10 выключаю на испытании. У меня еще VPN требуется для задачи. Там все нормально. Есть готовый екзешник (без исходного кода), он работает.
* This function binds the socket to the specified endpoint on the local * machine. в коде Boost куда меня ведет отладка я вижу такую строку, мне кажется проблема в этом. Мне нужен не локальный ендПоинт. Но сам я не программист, только примеры умею курочть.
И локал машин значит что это мой же компьютер? Ну или мой же до роутера а не интернет за пределами провайдера? А когда ВПН что такое локальная машина?
Прошу помочь, как изменить пример, что бы законектиться и получать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.05.2018, 17:03
Ответы с готовыми решениями:

[boost::asio] UDP-server
Используя библиотеку boost::asio создаю udp-server. Но при запуске приложения, когда уже одно запущено, приложение выбрасывает исключение....

Помогите с boost::asio::udp
Суть проблемы в том что есть асинхронный Udp сервер в составе приложения реализованный на boost. Который просто принимает сообщения (и...

Boost.asio ошибка в socket.connect
Подскажите почему коннект выдает ошибку? #include &lt;QCoreApplication&gt; #include &lt;boost/asio.hpp&gt; int main(int argc, char *argv) { ...

9
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.05.2018, 17:16
Что за нужные адреса? Эта программа для приёма данных? Как ты её проверяешь?
0
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 22
01.05.2018, 17:28  [ТС]
Это стандартный пример с сайта Boost https://www.boost.org/doc/libs... mples.html у меня для 1_66 там есть еще сендер, все собирается и работает.
Этот код проверяю с их сендером, работает, но он же на моем компьютере, как я понимаю умные слова программистов, на local host.
Что по адресам меня ждут, я проверяю выданным екзешником, он запускается и получает.
А этот код в строке socket_.bind(listen_endpoint); вызывает исключение Требуемый адрес для своего контекста неверен, если идти дальше в boost в отладчике visual studio 2017 community то примерно на строке this->get_service().bind(this->get_implementation(), endpoint, ec); и там выше строка This function binds the socket to the specified endpoint on the local
* machine. пояснение к коду. Из чего я делаю вывод что это пример для примера, а мне нужен внешний интернет -ВПН
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.05.2018, 17:35
Он же по умолчанию все адреса слушает - 0.0.0.0.
Твой "точно белый-статичный Ip" у твоего компьютера или у маршрутизатора?
0
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 22
01.05.2018, 17:43  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Твой "точно белый-статичный Ip" у твоего компьютера или у маршрутизатора?
Слово "маршрутизатор" мне не понятно. У меня белая коробка GPON к ней я подключаюсь по WiFi у провайдера у меня белый ip себя я вижу как 192.168.0.3
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.05.2018, 18:55
Цитата Сообщение от Mihail3200 Посмотреть сообщение
себя я вижу как 192.168.0.3
Это IP локальной сети.
А реальный адрес у твоего маршрутизатора, наверное.
0
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 22
01.05.2018, 19:11  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
А реальный адрес у твоего маршрутизатора,
С учетом того, что мне не удается пробиться, видимо статичный адрес у маршрутизатора. Как ни будь можно изменить пример, что бы подключится к внешнем интернету с этим кодом? Я уже читаю про какой то проброс портов, но не видится мне это относящимся к моей проблеме, да и какой мне порт пробрасывать? У меня же клиент.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.05.2018, 19:16
Ну ты можешь настроить port mapping на маршрутизаторе, чтобы входящий пакет направлялся на твой внутренний адрес. Но я не знаю, получится ли протестировать это изнутри твоей сети.
0
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 22
02.05.2018, 01:10  [ТС]
А как нибудь средствами Boost можно выйти в интернет в этом примере? Программы же как то работают без вмешательства в маршрутизатор.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
02.05.2018, 08:08
В этом примере прослушиваются все адреса данного хоста. Никаких других нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.05.2018, 08:08
Помогаю со студенческими работами здесь

Чат без сервера на Boost.Asio (broadcast и udp)
Здравствуйте! Передо мной стоит задача написать чат, не использующий сервер (для небольшой локальной сети). Для написания используем...

Boost.asio не вызвать методы socket и io_service
#include &quot;asio.hpp&quot; #include &lt;boost/asio/ip/tcp.hpp&gt; using boost::asio::ip::tcp; //using asio::ip::tcp; boost::asio::io_service...

boost::asio::ip::tcp::socket::async_connect не вызывает handler
Пытаюсь подключиться к серверу: void CTcpClient::Connect( const std::string &amp; IpAddress_, int Port_ ) { IpAddress = IpAddress_; ...

При boost::scoped_ptr<udp::socket> reset вылетает 0xC0000005
В конструктор класса подаются io_service и int port. На строчке в конструкторе рSocket_.reset(new udp::socket(io_service,...

asio+bind
при выполнении в bind.hpp и handler_type_requirements.hpp возникают ошибки вот код Server.h #ifndef SERVER_H #define SERVER_H ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru