2013-01-17 31 views
8

Come parte di un'app che sto sviluppando, devo essere in grado di risolvere l'IP corretto che corrisponde a un Bonjour hostname.Come risolvere un nome di dominio Bonjour con JmDNS

Ad esempio, mi viene dato jack.local e devo risolverlo in 192.168.1.141 che è l'indirizzo IP associato al jack.

Sto sfogliando le API JmDNS e il massimo che riesco a trovare sono i metodi che consentono di risolvere un servizio se il tipo e il nome sono noti. Tuttavia, semplicemente non riesco a trovare nulla che permetta di risolvere un nome host.

Quindi mi manca qualcosa? Non c'è davvero alcun modo per risolvere un nome host usando JmDNS?

+0

So che la sua possibile, l'ho fatto l'anno scorso, ma non im in grado di ottenere la risposta giusta per te, io non sono a casa e non sono in grado di dirvi come fare, i' torno quando sono a casa. – RaphMclee

+0

@RaphMclee Fantastico! In attesa. – Jake

+0

@Jake La soluzione di Raph ha funzionato per te? Sei riuscito ad accedere al tuo dispositivo Android utilizzando un nome host impostato e non il suo IP? –

risposta

-1

Con jmdns si ascoltano i servizi. Per iscriversi utilizzare le funzioni

jmdns = JmDNS.create(); 
jmdns.addServiceListener(String type, ServiceListener listener); 

volta jmdns trova un servizio ServiceListener ottiene notificato. L'ascoltatore ha tre funzioni pubbliche:

serviceResolved(ServiceEvent event) 
serviceRemoved(ServiceEvent event) 
serviceAdded(ServiceEvent event) 

con tutti si ottiene il ServiceEvent. Ora chiama event.getInfo().getHostAddresses() per ottenere una matrice di tutti gli indirizzi dell'Host.

Se si desidera risolvere il servizio devi chiamare

jmdns.requestServiceInfo(event.getType(), event.getName(), 1); 

nel metodo serviceAdded.

Dai un'occhiata alla: Quick Tutorial

+0

Questo presuppone che tu conosca il tipo di servizio. Ancora una volta, come noto nella domanda, sto cercando un modo per trovare l'IP dato l'host. Quindi deve cercare per nome host ... – Jake

+0

Hai provato a usare il nome host come tipo di servizio nel metodo addServiceListener (tipo String, listener ServiceListener); – RaphMclee

+0

'ServiceResolved' non viene chiamato mai !! Dove potrebbe essere il problema? – nmxprime

0

Se avete bisogno di scoprire nome host remoto in LAN da indirizzo IP utilizzando JmDNS è possibile utilizzare il seguente codice. Se è necessario eseguire la mappatura da hostname a IP, è possibile risolvere i nomi host per tutti gli IP subnet per creare una cache. Se la risoluzione del nome nativo supporta i nomi Bonjour locali, è sufficiente utilizzare InetAddress.getByName (nomehost) .getHostAddress().

final JmDNSImpl jmdns = new JmDNSImpl(null, null); 
    final HostInfo hostInfo = HostInfo.newHostInfo(InetAddress.getByName("192.168.1.78"), jmdns, null); 
    System.out.println("MDNS hostname (Bonjour): " + hostInfo.getName()); 
    System.out.println("DNS hostname: " + hostInfo.getInetAddress().getHostName()); 
    System.out.println("IP address: " + hostInfo.getInetAddress().getHostAddress()); 
    jmdns.close();