如何使用Boost Asio在Android上获取本地udp ip地址?
我正在使用Windows/Android和UDP开发一个简单的通信客户端。在Windows上解析主机名和ip地址时,我会得到我的计算机名和有效的ip地址。但是,android上的等效代码返回如何使用Boost Asio在Android上获取本地udp ip地址?,android,c++,network-programming,udp,boost-asio,Android,C++,Network Programming,Udp,Boost Asio,我正在使用Windows/Android和UDP开发一个简单的通信客户端。在Windows上解析主机名和ip地址时,我会得到我的计算机名和有效的ip地址。但是,android上的等效代码返回localhost和127.0.0.1。 如何从其他客户端获得可用的ip地址 获取本地ip地址的代码段 Android清单: 注释 我确实通过Java WifiManager找到了正确的ip地址。但是,我想直接从代码“C++/Booo::Asio”侧获得它,在那里,其余的网络代码是.< /P> < P>我
localhost
和127.0.0.1
。
如何从其他客户端获得可用的ip地址
获取本地ip地址的代码段
Android清单:
注释
我确实通过Java WifiManager找到了正确的ip地址。但是,我想直接从代码“C++/Booo::Asio”侧获得它,在那里,其余的网络代码是.< /P> < P>我从未尝试过用C++ C++编写Android代码,而是在ReaJJS或java中直接获得IP的方式,例如: 我想说的是,你最有可能从WifiManager那里获得IP,作为Android下的权威来源,这就是我一直从Android专家那里听到的。考虑到您希望坚持使用
boost::asio
,让我们仔细看看您的库
如果您查看Boost Asio的源代码,例如,在我看到一个调用Boost::Asio::detail::socket\u ops::gethostname(name,sizeof(name),ec)
,它位于
在内部我希望在所有可能的套接字上都有一个循环,因为可以有多个接口。我不清楚Android下的套接字/接口的顺序
换句话说:也许在Android下,你的库只是(不)幸运地得到了错误的套接字,它恰好是IP为127.0.0.1
的环回接口。
现在,您可以编写自己的asio::ip::gethostname()
函数,尝试多次查询底层asio::detail::socket\u ops::gethostname()
工具书类
- 及其副本
- 讨论了一个类似的问题,虚幻引擎。不同的系统,相同的效果
- Android网络的官方文档:
我想知道的一件小事,你是否在真实设备或Android模拟器上测试了你的应用程序?在真实设备上:)
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
<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" />
WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());