Boost Asio始终返回0.0.0.0 IP

时间:2013-12-14 10:43:25

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

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

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地址?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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