JmDNS - список служб не работает - PullRequest
0 голосов
/ 10 октября 2018

Я создал экземпляр JmDNS и зарегистрировал сервис с помощью registerService.Затем я запускаю поток, который обнаруживает службы:

              JmDNS jmdns=JmDNS.create();
              ....
              jmdns.registerService(serviceInfo);
              while (true) {
                ServiceInfo[] infos = jmdns.list("_airport._tcp.local.");
                System.out.println("List _airport._tcp.local.");
                for (int i = 0; i < infos.length; i++) {
                    System.out.println(infos[i]);
                }
                System.out.println();

                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    break;
                }
             }

Кажется, что jmdns.list (...) НЕ возвращает соответствующие службы.Иногда я не получаю ни одного опубликованного сервиса, а иногда, если я закрываю сервис, он все равно остается в списке (на пару минут - затем я завершил программу).У меня такое ощущение, что list () не обновляется .... Поэтому я обновил код следующим образом, который, кажется, работает соответствующим образом.

            while (true) {
                jmdns=JmDNS.create();
                ServiceInfo[] infos = jmdns.list("_airport._tcp.local.");
                ...

Даже если это решение, кажется, работает, для меня неяснопочему я не могу использовать один экземпляр jmdns для публикации и обнаружения сервисов.Код jmdns, который я нашел, является либо чисто издательским jmdns, либо чисто открывающим jmdns - я не нашел «смешанного» примера.Можете ли вы показать мне пример использования jmdns как для публикации, так и для обнаружения?

Редактировать: Действительно, прослушиватель службы, такой как

jmdnsListener.addServiceListener("_airport._tcp.local.", new MyServiceListener());

, не помогает: добавленное событие Serviceвызывается каждый раз - даже если провайдер уже прерван

...