我目前正在寻找一种获取本地IP地址的便携方式。由于我已经在使用Boost,所以我认为使用Boost.Asio完成这个任务是一个好主意。
网络上有几个例子可以完成这个任务。例如:
我尝试了两种代码,只进行了轻微的修改。Boost.Doc上的代码被更改为不解析“www.boost.org”,而是解析“localhost”或我的主机名。为了获取主机名,我使用了boost::asio::ip::host_name()或直接将其输入为字符串。
此外,我编写了自己的代码,这是上述示例和我从Boost文档和其他示例中获得的(少量)知识的结合。
所有的源代码都起作用,但它们只返回以下IP:
127.0.1.1(这不是笔误,在末尾有.1.1)
我在Ubuntu 9.10上运行和编译了代码,并使用GCC 4.4.1
一个同事在他的机器上尝试了相同的代码,得到了
127.0.0.2(这也不是笔误...)
他在Suse 11.0上编译和运行,使用的是GCC 4.4.1(我不是100%确定)
所以这是一个Linux问题,代码并不像我想象的那样可移植吗?我需要改变其他东西还是Boost.Asio根本不能解决我的问题?
我知道Stackoverflow和其他页面上有很多类似主题的问题,但我找不到对我有用的信息。如果您有有用的链接,指向它将会很好。
PS:这里是我从Boost.Doc中使用的修改后的代码:
#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;
}