【发布时间】:2020-05-31 02:46:27
【问题描述】:
我正在使用Boost-Asio 和UDP 在Windows/Android 之间开发一个简单的通信客户端。在 Windows 上解析主机名和 IP 地址时,我得到了我的计算机名和有效的 IP 地址。但是,android 上的等效代码返回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 端获取它,其余的网络代码所在的位置。
【问题讨论】:
-
小事我想知道,你是在真机还是安卓模拟器上测试你的应用?
-
在真实设备上:)
标签: android c++ network-programming udp boost-asio