Boost asio socket:如何获取IP,连接的端口地址?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Boost asio socket:如何获取IP,连接的端口地址?相关的知识,希望对你有一定的参考价值。

我有一个使用boost asio的TCP服务器。我接受了套接字连接。如何获取IP,我的服务器正在与之通信的机器端口?

顺便说一句:是否有可能获得有关连接服务器用户看到我的server4机器的IP的信息?

答案

您可以像这样获得IP和端口:

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

如果你在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();
另一答案

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。所以请记住处理异常或您的程序可能崩溃。我花了很多时间来调试这个问题。

以上是关于Boost asio socket:如何获取IP,连接的端口地址?的主要内容,如果未能解决你的问题,请参考以下文章

如何接受boost :: asio :: ssl :: stream 作为boost :: asio :: ip :: tcp :: socket类型的参数

将 std::bind 应用于带有参数 <boost::asio::ip::tcp::socket> 的函数时出错?

使用 boost::asio::ip::tcp::socket 作为 shared_ptr

使用 Boost.Asio 获取本地 IP 地址

使用 boost::asio 获取广播源 IP 地址

使用Boost asio实现同步的TCP/IP通信