Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android上的Boost.Asio失败,未找到服务(Boost 1.53;NDK r8e)_Android_Boost_Cross Platform_Boost Asio - Fatal编程技术网

Android上的Boost.Asio失败,未找到服务(Boost 1.53;NDK r8e)

Android上的Boost.Asio失败,未找到服务(Boost 1.53;NDK r8e),android,boost,cross-platform,boost-asio,Android,Boost,Cross Platform,Boost Asio,我正在尝试为Android和iOS构建一个跨平台的应用程序,并选择使用Boost简化通信和解析响应中的JSON。在iOS中一切正常,但如果我将查询更改为query(server)”,Android会出现“服务未找到”错误或“主机未找到(权威)” 我从我的应用程序中提取了代码,并将其简化为抛出错误的代码,这就是我所拥有的: ... #include <boost/asio.hpp> boost::asio::io_service io_service; std::string ser

我正在尝试为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());
}
。。。
#包括
boost::asio::io_服务io_服务;
std::string server=“”;
//获取与服务器名称对应的端点列表。
boost::asio::ip::tcp::解析器解析器(io_服务);
boost::asio::ip::tcp::resolver::query查询(服务器,“http”);
boost::system::error_code ec;
boost::asio::ip::tcp::resolver::迭代器端点_iterator=resolver.resolve(查询,ec);
国际单项体育联合会(欧共体)
{
返回env->NewStringUTF(ec.message().c_str());
}
我使用的是Android NDK r8e(64位)和Boost版本1.53(截至撰写之日的最新版本)。我使用64位NDK(请参阅)构建所需的Boost库,但做了一些修改

一旦我能让这个部件正常工作,我将修改它以使用iOS版本正在使用的
async\u resolve

编辑:

我注意到我忘了更新Android清单文件,所以我添加了
,但我仍然会遇到同样的错误。我只是在清单中遗漏了什么吗?

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

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

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

我尝试了这个方法,但在ndk构建过程中出现了一个错误。
错误:从'int'到'boost::asio::ip::resolver\u query\u base::flags'[-fppermissive]
@DemonGyro噢,对不起,端口应该是字符串。我已经修正了我的答案。构造函数的另一个版本是asio::ip::tcp::resolver::QueryQuery(“your.host.com”,“80”);或者asio::ip::tcp::resolver::query查询(“your.host.com”、“443”);对于https