我有一个使用boost asio的TCP服务器。我已经接受了一个套接字连接。如何获取正在与我的服务器通信的机器的IP和端口?
另外,是否可能获取连接到我的服务器的用户所看到的IP信息?
我有一个使用boost asio的TCP服务器。我已经接受了一个套接字连接。如何获取正在与我的服务器通信的机器的IP和端口?
另外,是否可能获取连接到我的服务器的用户所看到的IP信息?
你可以像这样获取IP地址和端口:
std::string sClientIp = socket().remote_endpoint().address().to_string();
unsigned short uiClientPort = socket().remote_endpoint().port();
如果您在远程端点中遇到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();
http://www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/reference/ip__tcp/endpoint.html
我没有IT经验,但看起来地址和端口成员函数应该可以解决问题。
(编辑最新的Boost版本)
我不能对原回答发表评论,只是想提一下最高票答案存在一些问题:socket().remote_endpoint()
可能会抛出 boost::system::system_error
异常。因此,请记得处理异常,否则你的程序可能会崩溃。我花了很多小时来调试这个问题。