0

DNS SRV レコード検出を追加しようとしている Android アプリがあります。私がインストールしたDNS Lookupなどのアプリの存在に基づいて、それが可能であることはわかっていますが、問題なく動作します。

私は dnsjava を使用しており、このコードは私のマシンではスタンドアロンの Java アプリケーションとして正常に動作しますが、Android デバイスで実行すると「エラー!」が表示されます。メッセージ:

Lookup lookup = new Lookup(serviceName, Type.SRV, DClass.IN);
Resolver resolver = new SimpleResolver();
lookup.setResolver(resolver);
lookup.setCache(null);
Record[] records = lookup.run();
if (lookup.getResult() == Lookup.SUCCESSFUL) {
    String responseMessage = null;
    String listingType = null;
    for (int i=0; i < records.length; i++) {
        if (records[i] instanceof SRVRecord) {
            listingType = ((SRVRecord) records[i]).toString()
        }
    }

    System.out.println("Found!");
    System.out.println("Response Message: "+responseMessage);
    System.out.println("Listing type: "+listingType);
} else if (lookup.getResult() == Lookup.HOST_NOT_FOUND) {
    System.out.println("Not found.");
} else {
    System.out.println("Error!");
}

これが機能しない理由はありますか?

4

2 に答える 2

1

Android で SRV ルックアップに非常に異なる設定を使用します。Android マニフェストに以下を追加しない限り、常に「見つかりません」で失敗することがわかりました。

<uses-permission android:name="android.permission.INTERNET" />
于 2015-11-22T21:18:43.580 に答える
0

私はコメントすることを許可されていません。

次のように、else if ステートメントをさらに作成します。

else if (lookup.getResult() == Lookup.HOST_NOT_FOUND) {
                    System.out.println("Not found.");
                } else if (lookup.getResult() == Lookup.TRY_AGAIN) {
                    System.out.println("Error!1");
                }  else if (lookup.getResult() == Lookup.TYPE_NOT_FOUND) {
                    System.out.println("Error!2");
                } else if (lookup.getResult() == Lookup.UNRECOVERABLE) {
                    System.out.println("Error!3");
                }

また、次のように変更してみてください。DClass.IN to DClass.ANY

于 2014-02-25T20:46:29.360 に答える