【问题标题】:Boost.Asio on Android failing with Service Not Found (Boost 1.53; NDK r8e)Android 上的 Boost.Asio 因未找到服务而失败 (Boost 1.53; NDK r8e)
【发布时间】:2013-06-25 14:31:11
【问题描述】:

我正在尝试为 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>,但我仍然收到相同的错误。我只是在清单中遗漏了其他内容吗?

【问题讨论】:

    标签: android boost cross-platform boost-asio


    【解决方案1】:

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

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

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

    【讨论】:

    • 我已经尝试过了,但在 ndk-build 期间出现错误。error: invalid conversion from 'int' to 'boost::asio::ip::resolver_query_base::flags' [-fpermissive]
    • @DemonGyro 哦,对不起,端口应该是字符串。我已经确定了答案。
    • 构造函数的另一个版本是 asio::ip::tcp::resolver::query query("your.host.com", "80");或 asio::ip::tcp::resolver::query query("your.host.com", "443");对于 https
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 2015-01-29
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 2014-07-02
    相关资源
    最近更新 更多