我正在尝试使用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确实能够发现设备已从网络中消失,但需要半个小时才能发现。是否可能使这个时间缩短?