gpt4 book ai didi

android - 如何使用 Boost Asio 在 Android 上获取我的本地 udp ip 地址?

转载 作者:行者123 更新时间:2023-12-01 14:07:41 25 4
gpt4 key购买 nike

我正在使用 Boost-Asio 在 Windows/Android 之间开发一个简单的通信客户端和UDP。在 Windows 上解析主机名和 IP 地址时,我得到了我的计算机名和有效的 IP 地址。但是,android 上的等效代码返回 localhost127.0.0.1 .
如何从其他客户端获取可用的 IP 地址?

获取本地IP地址的 fragment

  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

安卓 list :
  <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 获取它。我的应用程序的其余网络代码所在的一侧。

最佳答案

我从未尝试在 C++ 中为 Android 编写代码,而是在 ReactJS 中或直接在 Java 中,其中获取 IP 的方法是例如

WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());


我的意思是,您很可能应该从 获取 IP。 WifiManager作为Android下的权威源 - 这就是我一直从 Android 专家那里听到的。鉴于您想坚持 boost::asio ,让我们仔细看看您的图书馆。

如果您查看 Boost-Asio 的源代码,例如在 boost/asio/ip/host_name.hpp 我看到一个调用 boost::asio::detail::socket_ops::gethostname(name, sizeof(name), ec)位于
asio/detail/socket_ops.hpp 内.因为可以有多个接口(interface),所以我期待所有可能的套接字都有一个循环。对我来说,在 Android 下套接字/接口(interface)的顺序并不明显。

换句话说:也许在 Android 下,你的库只是(不)幸运地得到了错误的套接字,它恰好是带有 127.0.0.1 的环回接口(interface)。作为IP。
您现在可以编写自己的 asio::ip::gethostname()尝试查询底层 asio::detail::socket_ops::gethostname() 的函数不止一次。

引用
  • How to get IP address of the device from code?及其拷贝How to get the ip address of an android mobile programatically ....?
  • https://answers.unrealengine.com/questions/885603/view.html谈到了虚幻引擎的类似问题。不同的系统,同样的效果。
  • Android联网官方文档:https://developer.android.com/ndk/reference/group/networking
  • https://android.stackexchange.com/questions/3715/is-there-a-command-or-application-similar-to-ipconfig
  • 关于android - 如何使用 Boost Asio 在 Android 上获取我的本地 udp ip 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60240937/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com