2012-04-25 84 views
1

嗨我創建了示例jmdns serviceListner,當我運行它時,它應該繼續列出服務,因爲它發現,但與此我的程序,它列出幾個服務運行時,之後它沒有列出任何服務。我在我的谷歌Chrome瀏覽器中有dns-sd,所以當我在Chrome中瀏覽服務時,當時我的程序列出了其他服務,否則我的程序不會列出服務。我不明白爲什麼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

爲什麼你綁定到每個單獨的接口? – 2012-04-25 19:00:59

+0

因爲我在PC上運行它所以,以確保它可以接受形式的所有接口,也嘗試沒有綁定到接口但結果是一樣的,所以我沒有得到什麼問題,而令人驚訝的是,當我從鉻瀏覽dns-sd運行上面的代碼開始列出剩餘服務。 – twid 2012-04-26 09:27:18

+0

0.0.0.0接口應該監聽所有接口。 – 2012-04-26 10:31:08

回答

1

我有類似的問題兩個。 該問題可能來自您的防火牆設置。

在我的情況下,javaw.exe可以訪問所有傳入的呼叫,但防火牆阻止它時無法向任何人發送任何信息。

嘗試轉動防火牆來測試你的程序,並確保不是防火牆引起的問題。

+0

謝謝我沒有試過,但沒有工作,正如我在我最後的評論中提到的,我沒有更新到新的快照,然後很好地工作..我注意到JMDNS正在從服務器接收多路郵件,但無法提供服務聽衆類.. – twid 2012-07-26 11:14:21

+0

你爲什麼後增量你計數變量,而不是預增量? (將其更改爲--count和++計數以獲得正確數量的檢測服務) – RaphMclee 2012-07-31 05:57:39

+0

是的您是對的......但我的問題是JmDNS Library無法將所有服務事件傳遞給偵聽器類(ServiceListenerClass)。因此,除非ServiceListenerClass無法獲得任何事件通知,否則無法顯示服務信息。謝謝... – twid 2012-08-01 10:59:56

0

同樣的問題在這裏。用以下參數啓動java解決了它對我來說:

-Djava.net.preferIPv4Stack=true