2013-01-17 22 views
8

私が開発しているアプリの一環として、Bonjour hostnameに対応する正しいIPを解決できるようにする必要があります。JmDNSでBonjourドメイン名を解決する方法

たとえば、私はjack.localと与えられ、それを192.168.1.141に解決する必要があります。これは、ジャックに関連するIPアドレスです。

私はJmDNS APIを使いこなしてきました。タイプと名前がわかっている場合、サービスを解決できるメソッドがあります。しかし、私は単にホスト名を解決できるものは見つけられません。

何か不足していますか? JmDNSを使ってホスト名を解決する方法はありませんか?

+0

私はそれが可能であることを知っています、私は昨年それをしましたが、私はあなたのために正しい答えを得ることができませんでした、私は家ではないとあなたにそれを行う方法、私は家にいるときに戻ってよ。 – RaphMclee

+0

@RaphMclee素晴らしい!楽しみにしている。 – Jake

+0

@Jake Raphのソリューションはあなたのために機能しましたか?設定したホスト名を使用してAndroidデバイスにアクセスできましたが、IPではありませんか? –

答えて

-1

jmdnsではサービスを聴いています。 jmdnsがServiceListenerが通知されたサービスを見つけるとサブスクライブ機能

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

を使用します。あなたがServiceEventを得るみんなと一緒に

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

:リスナーは、3つのパブリックな機能を持っています。今度はevent.getInfo().getHostAddresses()と呼んで、ホストのすべてのアドレスの配列を取得します。

あなたはserviceAdded方法で

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

を呼び出す必要がサービスを解決します。あなたは、次のコードを使用することができますJmDNSを使用してIPアドレスからLANにリモートホスト名を見つけるために必要がある場合はQuick Tutorial

+0

これは、サービスの種類を知っていることを前提としています。もう一度、私は質問に注意して、私はホストを与えられたIPを見つける方法を探しています。したがって、ホスト名で検索する必要があります。 – Jake

+0

メソッドaddServiceListener(String type、ServiceListener listener)でサービスタイプとしてホスト名を使用しようとしました。 – RaphMclee

+0

'ServiceResolved'はこれまでに呼び出されていません!!どこに問題がありますか? – nmxprime

0

はを見てください。 hostnameからIPにマップする必要がある場合は、すべてのサブネットIPのホスト名を解決してキャッシュを構築できます。ネイティブの名前解決がローカルのBonjour名をサポートしている場合は、InetAddress.getByName(hostname).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(); 
関連する問題