Boost asio socket: как получить IP-адрес, адрес порта подключения?

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

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

Ответ 1

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

std::string sClientIp = socket().remote_endpoint().address().to_string();
unsigned short uiClientPort = socket().remote_endpoint().port();

Ответ 2

все еще, если вы получаете ошибку 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();

Ответ 4

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