gpt4 book ai didi

java - JmDNS 设备移除检测

转载 作者:搜寻专家 更新时间:2023-11-01 03:38:38 24 4
gpt4 key购买 nike

我正在尝试使用 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 确实发现该设备从网络中丢失,但只是在半小时后。有没有可能缩短这个周期?

最佳答案

serviceRemoved() 方法仅在被删除的设备在关闭前注销自身时被调用。 JmDNS 不会主动检查设备是否存在,而只是收听广播消息。如果被删除的设备没有自行取消注册,JmDNS 永远不会知道它使用超时(在您的情况下可能是 30 分钟)。检查设备是否仍然存在的一种方法是主动询问它。有几种方法可以做到这一点。我不知道 JmDNS 是否已经为此构建了一些东西。

关于java - JmDNS 设备移除检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21202240/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com