Я создал экземпляр 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вызывается каждый раз - даже если провайдер уже прерван