我目前正在寻找一种获取本地IP地址的便携方式.因为我正在使用Boost,我认为使用Boost.Asio来完成这项任务是个好主意.
网上有几个例子可以解决问题.例子:
我只是略微修改了两个代码.Boost.Doc上的代码更改为不解析"www.boost.org",而是"localhost"或我的主机名.为了获取主机名,我使用boost :: asio :: ip :: host_name()或直接键入它作为字符串.
另外,我编写了自己的代码,它是上述示例和我从Boost文档和其他示例中收集的(小)知识的合并.
所有的资源都有效,但他们只返回了以下IP:
127.0.1.1(这不是拼写错误,最后是.1.1)
我运行并使用GCC 4.4.1在Ubuntu 9.10上编译代码
一位同事在他的机器上尝试了相同的代码,得到了
127.0.0.2(也不是一个错字......)
他用GCC 4.4.1编译并运行在Suse 11.0上(我不是100%肯定)
我不知道是否可以更改localhost(127.0.0.1),但我知道我或我的同事都没有这样做.ifconfig表示loopback使用127.0.0.1.ifconfig还找到我要搜索的公共IP(在我的情况下是141.200.182.30,子网是255.255.0.0)
这是一个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;
}
Run Code Online (Sandbox Code Playgroud)