Днсава и андроид

У меня есть приложение для Android, в которое я пытаюсь добавить обнаружение записи DNS SRV. Я знаю, что это возможно, основываясь на существовании приложений, таких как 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!");
}

Есть идеи, почему это не работает?

2 ответа

Использование совсем другой настройки для поиска SRV в Android; Я обнаружил, что они всегда терпели неудачу с 'not found', если я не добавляю следующее в мой Android Manifest:

<uses-permission android:name="android.permission.INTERNET" />

Мне не разрешено комментировать - иначе я бы.

Сделайте больше, если заявления, например:

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

Другие вопросы по тегам