2

Android と iOS 用のクロスプラットフォーム アプリケーションを構築しようとしていますが、Boost を使用して通信を簡素化し、応答から JSON を解析することにしました。iOS ではすべて正常に動作しますが、クエリをquery(server, "");.

私は自分のアプリケーションからコードを引き出し、エラーをスローしていたものに単純化しました。これが私が持っているものです:

...
#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 マニフェスト ファイルを更新するのを忘れていたことに気付いたので、 を追加しまし <uses-permission android:name="android.permission.INTERNET"></uses-permission>たが、それでも同じエラーが発生します。マニフェストに何か他のものが欠けているだけですか?

4

1 に答える 1

5

これは、OS がどのポートが を表しているかを判断できないことを意味しhttpます。ほとんどの POSIX 準拠のシステムでは、このマッピングは/etc/servicesファイルで行われ、httpそこに行がない場合、「サービスが見つかりません」というエラーが発生します。

Android にこのファイルがあるかどうかはわかりません (古いバージョンではまったくサポートされていませんでした。サービスは でハードコードされていましたbionic)。上記のエラーが発生した場合の唯一の回避策は、目的のポートを手動で設定することです。

tcp::resolver::query query(tcp::v4(), yourHost, "80");
于 2013-06-25T15:11:04.243 に答える