我正在开发一个简单的通讯客户端,它在Windows/Android之间使用Boost-Asio和UDP。当在Windows上解析主机名和IP地址时,我得到的是计算机名称和有效的IP地址。然而,在Android上相应的代码返回
获取本地IP地址的片段:
localhost
和127.0.0.1
。如何获取其他客户端可用的IP地址?获取本地IP地址的片段:
auto io_service = asio::io_service();
auto resolver = asio::ip::udp::resolver(io_service);
const auto host_name = asio::ip::host_name(); // "localhost" on android
const auto query = asio::ip::udp::resolver::query(host_name, "");
const auto begin = resolver.resolve(query);
const auto end = asio::ip::udp::resolver::iterator{};
for (
auto it = resolver.resolve(query);
it != end;
++it
) { auto ip = it->endpoint().address(); } // only 127.0.0.1 on android
Android清单文件:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
注释
我通过Java WifiManager找到了正确的IP地址。然而,我希望直接从我的应用程序的C++/boost::asio
部分获取它,因为我的网络代码的其余部分都在那里。