我有一个使用boost asio的TCP服务器。我接受了套接字连接。如何获取IP,我的服务器正在与之通信的机器端口?
顺便说一句:是否有可能获得有关连接服务器用户看到我的server4机器的IP的信息?
答案 0 :(得分:24)
您可以像这样获得IP和端口:
std::string sClientIp = socket().remote_endpoint().address().to_string();
unsigned short uiClientPort = socket().remote_endpoint().port();
答案 1 :(得分:4)
如果你在remote_endpoint中收到Bad File Descriptor错误,你可以参考下面的链接。
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();
答案 2 :(得分:3)
http://www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/reference/ip__tcp/endpoint.html
我没有相关经验,但看起来地址和端口成员函数应该可以解决问题
(编辑最新的Boost版本)
答案 3 :(得分:1)
我无法对原始答案发表评论。我只想提一下,最高投票答案存在一些问题:socket().remote_endpoint()
可能会抛出boost::system::system_error
。所以请记住处理异常或您的程序可能崩溃。我花了很多时间来调试这个问题。