我正在尝试使用 JmDNS 来检测网络上设备的添加和删除。添加工作正常,只要在 JmDNS 中注册了它们各自的服务就会找到这些设备,但是,当从网络中删除设备时,它永远不会在 JmDNS 中注册。
我曾尝试定期调用jmDns.list(serviceName),但似乎它总是返回缓存值。
是否可以让 JmDNS 注册已删除的设备?
这是我用来注册服务和服务监听器的代码(仅相关部分):
服务:
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 确实发现该设备从网络中丢失,但仅在半小时后。有没有可能缩短这个时间?