2012-04-25 3 views
1

Привет, я создал образец jmdns serviceListner, Когда я запустил его, он должен продолжать перечислять службы по мере их нахождения. Но с этой моей программой он перечисляет несколько сервисов при запуске и после этого не перечисляет службы. И у меня есть dns-sd в моем браузере Google 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

Почему вы связываетесь с каждым отдельным интерфейсом? –

+0

Так как я запускаю его на ПК Итак, чтобы убедиться, что он может получить форму всех интерфейсов, Также попробовал без привязки к интерфейсам. Но результат был таким же, Так что я не понимаю, в чем проблема. И удивительно, когда я просматриваю dns-sd из chrome while запуск над кодом, начинающийся с перечисления оставшихся служб. – twid

+0

Интерфейс 0.0.0.0 должен прослушивать все интерфейсы. –

ответ

1

У меня была аналогичная проблема. Проблема может возникнуть в настройках вашего брандмауэра.

В моем случае javaw.exe имел доступ ко всем входящим вызовам, но ничего не мог отправить кому-либо, поскольку брандмауэр заблокировал его.

Попробуйте включить брандмауэр, чтобы протестировать вашу программу и быть shure, а не брандмауэром, вызывающим проблему.

+0

Спасибо, что я пробовал это, но не работал, и, как я упомянул в своем последнем комментарии, я обновился до нового моментального снимка, а затем отлично работал. Я заметил, что JMDNS получал многоадресные сообщения с сервера, но не смог доставить в Службу Listener class. – twid

+0

Почему вы постинкремент вы считаете переменной, а не preincrement ?? (измените его на --count и ++ count, чтобы иметь правильное количество обнаруженных служб) – RaphMclee

+0

Да Вы правы ... Но моя проблема заключалась в том, что библиотека JmDNS не смогла доставить все события службы в класс Listener (ServiceListenerClass). Таким образом, до тех пор, пока ServiceListenerClass не сможет получить уведомление о событии, он не может отображать служебную информацию. Спасибо... – twid

0

Такая же проблема здесь. Запуск java со следующим аргументом решил это для меня:

-Djava.net.preferIPv4Stack=true 

 Смежные вопросы

  • Нет связанных вопросов^_^