. Próbuję użyć jmdns na Androidzie 3.2.1 (HTC Flyer) i używam jmdns do wykrywania usług. Wszystko działa dobrze, z tym że jedno z moich trzech urządzeń (reszta z nich działa dobrze) nadaje adres IPv6 zamiast IPv4. To bardzo dziwne, ponieważ wszystkie są połączone z moją siecią domową przez DHCP, więc wszystkie mają przypisany adres IPv4.jmdns rejestruje się na interfejsie IPv4, ale nadaje IPv6
Więc w moim urządzeniu biegnę
android.net.wifi.WifiManager wifi = (android.net.wifi.WifiManager) getSystemService(android.content.Context.WIFI_SERVICE);
multicastLock = wifi.createMulticastLock("mylockthereturn");
multicastLock.setReferenceCounted(true);
multicastLock.acquire();
try {
jmdns = JmDNS.create();
jmdns.registerServiceType(jmdnsType);
String jmdnsName = /* Read from db */;
serviceInfo = ServiceInfo.create(jmdnsType, huggler_id, server.getLocalPort(), " blah blah");
jmdns.registerService(serviceInfo);
Log.d(TAG, "JMDNS service registered on ip " + jmdns.getInterface());
} catch (IOException e) {
Log.e(TAG, "Error creating JMDNS service (" + e.getMessage() + ")");
e.printStackTrace();
}
I wypisuje ładny IPv4 IP, które rzeczywiście pasuje do jednego przypisanego przez moją sieć (sukces).
Ale po uruchomieniu kodu, który wykrywa usługi na innych urządzeniach.
for(ServiceInfo si : jmdns.list(jmdnsType, 6000)) { // timeout: 6s
if (si.getName().equals(jmdnsNAme))
continue;
try {
Log.d(TAG, "Host has " + si.getInet4Addresses().length + " v4 addresses. ");
Log.d(TAG, "Host has " + si.getInet6Addresses().length + " v6 addresses. ");
}
A kiedy odkryje ulotkę, wyświetli dokładnie jeden adres v6.
Czy ktoś może zasugerować, co mogło się stać?
Używam Jmdns 3.4.0 (3.4.1 nie działa w ogóle!) I jestem rodzaju początkujący zerokonf.
UPDATE:
Niektóre nowe informacje:
D/Huggler (5691): Host has 0 v4 addresses.
D/Huggler (5691): Host has 1 v6 addresses.
D/Huggler (5691): Host IPv6 address is fe80::66a7:69ff:feeb:9083
D/Huggler (5691): Host IPv6 hostname is fe80::66a7:69ff:feeb:9083
D/Huggler (5691): Host is linklocal true
Czy ktoś może pomóc zinterpretować te?
nie miałoby to być adres IPv6 link-local (tj FE80 :: coś)? – fge
Ponadto, jeśli możesz kontrolować argumenty maszyny JVM, czy próbowałeś dodać '-Djava.net.preferIPv4Stack = true'? Jeśli tak, czy nadal masz ten błąd? – fge
Dzięki za komentarz, fge. Pierwszy komentarz: czy możesz to rozwinąć? (Jeśli zrozumiałem cię poprawnie, czy mówisz, że jest to odpowiednik adresu IPv6 w wersji 127.0.0.1? Jak to by to wyjaśniło pierwszą część mojego pytania) Drugi komentarz: Jak ustawić te ustawienia podczas kompilacji dla Androida? Myślę, że nie mogę – siemanko