Ответ 1
Вы можете получить IP и порт следующим образом:
std::string sClientIp = socket().remote_endpoint().address().to_string();
unsigned short uiClientPort = socket().remote_endpoint().port();
У меня есть TCP-сервер, использующий boost asio. Я принял соединение сокета. Как получить IP-порт, с которым связан мой сервер с?
BTW: возможно ли получить информацию о том, какой IP-адрес, который подключил пользователь сервера, к моей машине server4?
Вы можете получить IP и порт следующим образом:
std::string sClientIp = socket().remote_endpoint().address().to_string();
unsigned short uiClientPort = socket().remote_endpoint().port();
все еще, если вы получаете ошибку 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();
http://www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/reference/ip__tcp/endpoint.html
У меня нет опыта в нем, но похоже, что функции адреса и порта должны делать трюк
(отредактируйте последнюю версию Boost)
Я не могу прокомментировать исходный ответ. Я просто хочу упомянуть, что есть некоторые проблемы с главным голосом: socket().remote_endpoint()
может бросить boost::system::system_error
. Поэтому не забудьте обработать исключение, или ваша программа может вылететь из строя. Мне потребовалось много часов, чтобы отладить эту проблему.