JmDNS设备移除检测

4

我正在尝试使用JmDNS来检测网络上设备的添加和移除。添加操作很好用,只要设备的相应服务注册到JmDNS,就会找到设备,但是,当设备从网络中移除时,它不会被注册到JmDNS中。

我已经尝试定期调用jmDns.list(serviceName),但似乎它总是返回缓存的值。

是否有可能让JmDNS注册移除的设备?

这是我用来注册服务和服务监听器的代码(仅涉及相关部分):

Service:

JmDNS jmdns = JmDNS.create();
ServiceInfo service = ServiceInfo.create("_test._tcp.local.", "Test", 1234, 0, 0, false, "Test info");
jmdns.registerService(service);

服务监听器:

JmDNS jmDns = JmDNS.create();
jmDns.addServiceListener("_test._tcp.local.", new ServiceListener() {
    @Override
    public void serviceAdded(ServiceEvent event) {
        System.out.println("Service added " + event.getInfo());
    }

    @Override
    public void serviceRemoved(ServiceEvent event) {
        System.out.println("Service removed " + event.getInfo());
    }

    @Override
    public void serviceResolved(ServiceEvent event) {
        System.out.println("Service resolved" + event.getInfo());
    }
});

即使以前注册的设备不再开机,方法serviceRemoved()也没有被调用。非常感谢您在解决此问题方面给予的任何帮助。

更新:JmDNS确实能够发现设备已从网络中消失,但需要半个小时才能发现。是否可能使这个时间缩短?

1个回答

1

serviceRemoved()方法只有在被移除的设备在关闭之前注销自己时才会被调用。JmDNS不会主动检查设备的存在,而只是监听广播消息。如果被移除的设备没有注销自己,则JmDNS在超时达到之前永远不会知道它的存在(在您的情况下可能是30分钟)。

检查设备是否仍然存在的一种可能性是主动询问它。有几种方法可以做到这一点。我不知道JmDNS是否已经为此构建了某些内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接