2013-12-14 36 views
0

我有这样的代码在我的服务器(分散各地的建设者等,但我已经离开了不必要的部分):升压短耳总是返回0.0.0.0 IP

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

回答

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

+0

回答你的问题:正如我所说,我已经省去了不必要的部分。接受者在那里,因为服务器接受连接。为了简单起见,我只包含了一个这样的接受。我的代码有什么问题吗? – marczellm

1

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

相关问题