2014-01-18 71 views
4

我试图使用JmDNS来检测网络上设备的添加和删除。这些添加工作正常,只要各自的服务向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确实知道设备从网络中丢失,但只有半小时后才能找到。有可能缩短这个时间吗?

回答

1

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