【问题标题】:Boost Asio always returns 0.0.0.0 IPBoost Asio 总是返回 0.0.0.0 IP
【发布时间】:2014-01-02 03:40:05
【问题描述】:

我的服务器中有这段代码(分散在构造函数等周围,但我省略了不必要的部分):

using namespace boost::asio;
io_service ioserv;
ip::tcp::endpoint endpoint(ip::tcp::v4(), 1922);
ip::tcp::acceptor acceptor(ioserv, endpoint);
ip::tcp::socket socket(ioserv);
acceptor.accept(socket);

现在我想将我的 IP 写入控制台。不幸的是两个

cout << endpoint.address() << endl;

cout << acceptor.local_endpoint().address() << endl;

打印

0.0.0.0

如何获取我机器的 IP 地址?

【问题讨论】:

    标签: c++ networking boost boost-asio ip-address


    【解决方案1】:

    你从哪里得到的代码?

    试试这个:

    #include <boost/asio.hpp>
    using boost::asio::ip::tcp;    
    
    boost::asio::io_service io_service;
    tcp::resolver resolver(io_service);
    tcp::resolver::query query(boost::asio::ip::host_name(), "");
    tcp::resolver::iterator iter = resolver.resolve(query);
    tcp::resolver::iterator end; // End marker.
    while (iter != end)
    {
        tcp::endpoint ep = *iter++;
        std::cout << ep << std::endl;
    }
    

    看看this discussion

    【讨论】:

    • 回答您的问题:正如我所说,我省略了不必要的部分。接受器在那里是因为服务器接受连接。为简单起见,我只包含了一个这样的接受。我的代码有什么问题吗?
    【解决方案2】:

    默认绑定地址是 INADDR_ANY,即 0.0.0.0,这意味着套接字将接受通过任何接口的连接。您的代码完全正确,只是它不是确定 IP 地址的正确方法。您可以直接通过 Sockets API 获取,而无需创建套接字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      相关资源
      最近更新 更多