JmDNS-服务列表失败

时间:2018-10-10 19:26:26

标签: bonjour zeroconf jmdns

我创建了一个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事件-即使提供商已经终止

0 个答案:

没有答案