gpt4 book ai didi

android - Android 上的 Boost.Asio 因未找到服务而失败(Boost 1.53;NDK r8e)

转载 作者:太空狗 更新时间:2023-10-29 16:41:20 28 4
gpt4 key购买 nike

我正在尝试为 Android 和 iOS 构建跨平台应用程序,并选择使用 Boost 来简化通信并从响应中解析 JSON。在 iOS 中一切正常,但如果我将查询更改为 query(server, "");,Android 将失败并出现“找不到服务”错误或“找不到主机(权威)” .

我从我的应用程序中提取代码并将其简化为引发错误的代码,这就是我所拥有的:

...
#include <boost/asio.hpp>

boost::asio::io_service io_service;
std::string server = "<server_address>";

// Get a list of endpoints corresponding to the server name.
boost::asio::ip::tcp::resolver resolver(io_service);
boost::asio::ip::tcp::resolver::query query(server, "http");
boost::system::error_code ec;
boost::asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query,ec);

if (ec)
{
return env->NewStringUTF(ec.message().c_str());
}

我使用的是 Android NDK r8e(64 位)和 Boost 版本 1.53(撰写本文时的最新版本)。我用过https://github.com/MysticTreeGames/Boost-for-Android稍作修改即可使用 64 位 NDK(请参阅 https://github.com/MysticTreeGames/Boost-for-Android/pull/28)构建所需的 Boost 库。

我将对其进行修改以与 async_resolve 一起使用,这就是 iOS 版本正在使用的,一旦我能让这部分工作。

编辑:

我注意到我忘记更新 Android Manifest 文件,所以我添加了
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
,但我仍然遇到相同的错误。我只是遗漏了 list 中的其他内容吗?

最佳答案

这意味着操作系统无法确定哪个端口代表http。在大多数 POSIX 兼容系统上,此映射是在 /etc/services 文件中完成的,如果 http 行丢失,您将收到“找不到服务”错误。

我不知道Android是否有这个文件(旧版本根本不支持它,这些服务被硬编码在bionic),但是如果你得到上面的错误,唯一的解决方法是手动设置所需的端口:

tcp::resolver::query query(tcp::v4(), yourHost, "80");

关于android - Android 上的 Boost.Asio 因未找到服务而失败(Boost 1.53;NDK r8e),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17300122/

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