Boost asio socket: как получить IP, адрес порта подключения? - PullRequest
11 голосов
/ 18 марта 2011

У меня TCP-сервер, использующий boost asio. Я принял сокетное соединение. Как получить IP, порт машины, с которой связывается мой сервер?

Кстати: возможно ли получить информацию о том, какой ip пользователь подключенного сервера видит на моей машине server4?

Ответы [ 4 ]

25 голосов
/ 18 марта 2011

Вы можете получить IP и порт следующим образом:

std::string sClientIp = socket().remote_endpoint().address().to_string();
unsigned short uiClientPort = socket().remote_endpoint().port();
4 голосов
/ 13 сентября 2012

по-прежнему, если вы получаете ошибку Bad File Descriptor в remote_endpoint, вы можете обратиться к ссылке ниже:

http://www.boost.org/doc/libs/1_51_0/doc/html/boost_asio/reference/basic_socket_acceptor/accept.html

«Примите новое соединение и получите конечную точку узла».часть будет полезна для вас.

Вы можете использовать, как показано ниже

tcp::acceptor::endpoint_type end_type;
acceptor.accept(*stream.rdbuf(), end_type);
std::string sClientIp = end_type.address().to_string();
3 голосов
/ 18 марта 2011

http://www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/reference/ip__tcp/endpoint.html

У меня нет опыта в этом, но похоже, что функции адреса и члена порта должны помочь

(редактировать для последней версии Boost)

1 голос
/ 29 декабря 2017

Я не могу комментировать исходный ответ.Я просто хочу упомянуть, что есть некоторая проблема с ответом с наибольшим количеством голосов: socket().remote_endpoint() может выбросить boost::system::system_error.Поэтому не забудьте обработать исключение, иначе ваша программа может вылететь.Мне потребовалось много часов, чтобы решить эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...