Quindi sto cercando di utilizzare jmdns su Android 3.2.1 (HTC Flyer) e sto usando jmdns per l'individuazione dei servizi. Tutto funziona bene tranne che uno dei miei tre dispositivi (il resto funziona bene) sta trasmettendo indirizzo IPv6 invece di IPv4. Questo è molto strano visto che sono tutti collegati alla mia rete domestica tramite DHCP, quindi sono tutti assegnati all'indirizzo IPv4.jmdns registra sull'interfaccia IPv4, ma trasmette IPv6
Quindi sul mio dispositivo corro
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();
}
Ed esso stampa bello IP IPv4, che corrisponde in realtà quello assegnato dalla mia rete (successo).
Ma quando eseguo codice che rileva servizi su altri dispositivi.
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. ");
}
E quando rileva Flyer mostra esattamente un indirizzo v6.
Qualcuno può suggerire cosa potrebbe essere successo?
Sto usando Jmdns 3.4.0 (3.4.1 non funziona affatto!) E sono una specie di novizio zeroconf.
UPDATE:
alcune nuove informazioni:
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
Qualcuno può aiutarmi interpretare tali?
Non sarebbe indirizzo IPv6 essere collegamento locale (vale a dire, fe80 :: qualcosa)? – fge
Inoltre, se è possibile controllare gli argomenti JVM, si è tentato di aggiungere '-Djava.net.preferIPv4Stack = true'? Se sì, hai ancora questo bug? – fge
Grazie per il tuo commento, fge. Primo commento: puoi approfondire questo? (Se ti ho capito bene, stai dicendo che è equivalente a IPv6 di 127.0.0.1? Come spiegherebbe allora la prima parte della mia domanda) Secondo commento: Come imposto queste impostazioni durante la compilazione per Android? Penso di non poterlo fare – siemanko