2012-04-25 6 views
1

こんにちは私はサンプルjmdns serviceListnerを作成しました。私はそれを実行すると、それが見つかるとサービスを一覧表示する必要がありますが、このプログラムでは、サービスは表示されません。そして、私はGoogleのクロムブラウザでdns-sdを持っているので、クロムでサービスをブラウズすると、その時に私のプログラムリストの他のサービス、そうでなければ私のプログラムはサービスをリストしません。 ServiceListner自体が後続のイベントを検出しない理由はわかりません。JMdns ServiceListnerがすべてのサービスを見つけられません

public static void main(String[] args) throws Exception { 
    String type = "_my-app._tcp.local."; 
    Enumeration<NetworkInterface> ifc = NetworkInterface.getNetworkInterfaces(); 
    while (ifc.hasMoreElements()) { 
     NetworkInterface anInterface = ifc.nextElement(); 
     if (anInterface.isUp()) { 
      Enumeration<InetAddress> addr = anInterface.getInetAddresses(); 
      while (addr.hasMoreElements()) { 
       InetAddress address = addr.nextElement(); 
       final JmDNS jmdns = JmDNS.create(address, type); 
       ServiceListenerClass aClass = new ServiceListenerClass(); 
       jmdns.addServiceListener(type, aClass);    

      } 
     } 
    } 


} 

public static class ServiceListenerClass implements ServiceListener { 
    public void serviceAdded(ServiceEvent event) { 
     event.getDNS().requestServiceInfo(event.getType(), event.getName(), true); 
    } 

    public void serviceRemoved(ServiceEvent event) { 
     System.out.println((count--) + " " + event.getInfo().getName()); 
    } 

    public void serviceResolved(ServiceEvent event) { 
      System.out.println((count++) + " :Res: " + event.getInfo().getName() + " " + event.getInfo().getPort() + " " + event.getInfo().getApplication() 
        + " " + event.getInfo().getDomain() + " " + event.getInfo().getKey()); 
    } 
} 
+0

なぜ個々のインターフェイスにバインドしますか? –

+0

以来、PC上で実行しているので、すべてのフォームを受信することができることを確認するには、また、インターフェイスにバインドせずに試してみましたしかし、結果は同じだったので、私は問題を取得しないと驚くほど私はクロムからdns-上記のコードを実行すると残りのサービスが一覧表示されます。 – twid

+0

0.0.0.0インターフェイスはすべてのインターフェイスをリッスンする必要があります。 –

答えて

1

私にも同様の問題2がありました。 問題はファイアウォールの設定に起因する可能性があります。

私の場合、javaw.exeはすべての着信呼び出しにアクセスできましたが、ファイアウォールがそれをブロックしたので誰にも何も送信できませんでした。

プログラムをテストするためにファイアウォールを有効にして、問題の原因となっているファイアウォールではないことを確認してください。

+0

私はそれを試してみましたが、うまくいきませんでした。最後のコメントで新しいスナップショットに更新してからうまくいきました。JMDNSはサーバーからマルチキャストメッセージを受信して​​いましたが、リスナークラスにサービスを提供してください。 – twid

+0

なぜあなたはポストインクリメントをカウントしていますか? – RaphMclee

+0

はいあなたは正しいですが、私の問題は、JmDNSライブラリがListenerクラス(ServiceListenerClass)にすべてのサービスイベントを配信できなかったことです。したがって、ServiceListenerClassがイベント通知を受け取ることができない限り、サービス情報を表示することはできません。どうも... – twid

0

ここに同じ問題があります。以下の引数でjavaを起動すると、私のために解決されました:

-Djava.net.preferIPv4Stack=true 
関連する問題