DNS-SD:“mdnsjava”的经验?

我现在正在将DNS-DS库“ mdnsjava ”实现到我的Android项目中,因为它在几个位置被提到,例如在SO:

除了JMDNS之外,还有其他任何用于bonjour / zeroconf的Java库吗? 。

在实现时,我想知道这个实现是否真的使用任何缓存和/或它可能执行的稳定性。

现在我在过去的2年里使用jmDNS,但是这个库在暂停发现(后台应用程序)时无法保留缓存。

此外,jmDNS发现设备时速度慢且不稳定。

那么,有没有人有mdnsjava的经验?

同时我可以说,在大多数情况下,mdnsjava的工作非常好且稳定。 与jMDNS相比,更好,更快。

这里有一些代码可以重新启动完整的发现并启动/停止发现,也许它可以帮助某人:

MulticastDNSService mDNSService = null; Browse browse = null; Object serviceDiscoveryInstance = null; public void stop() { try { if (serviceDiscoveryInstance != null && mDNSService != null) { mDNSService.stopServiceDiscovery(serviceDiscoveryInstance); mDNSService.close(); } serviceDiscoveryInstance = null; //mDNSService = null; if (browse != null) { browse.close(); // this is required, otherwise the listeners won't get called in next run browse = null; } Querier querier = MulticastDNSLookupBase.getDefaultQuerier(); if (querier != null) { querier.close(); } MulticastDNSLookupBase.setDefaultQuerier(null); } catch (Exception e) { Log(..) } } public void start() { try { Querier querier = MulticastDNSLookupBase.getDefaultQuerier(); if (querier != null) { if (mDNSService == null) { mDNSService = new MulticastDNSService(); } if (browse == null) { browse = new Browse(SERVICE_TYPE); } if (serviceDiscoveryInstance == null) { serviceDiscoveryInstance = mDNSService.startServiceDiscovery(browse, this); } // add existing entries Lookup resolve = new Lookup(SERVICE_TYPE); resolve.setQuerier(mDNSService.getQuerier()); ServiceInstance[] services = resolve.lookupServices(); for (ServiceInstance service : services) { addDevice(service); } resolve.close(); } else { Log.e("Cannot start mDNS-discovery because querier is not set up!"); resetDiscovery(); } } catch (Exception e) { Log.e("Error while discovering network.", e); resetDiscovery(); } } public void clearCaches() { if (MulticastDNSCache.DEFAULT_MDNS_CACHE != null) { MulticastDNSCache.DEFAULT_MDNS_CACHE.clearCache(); } mDNSService = null; browse = null; } private void resetDiscovery(){ stop(); mDNSService = null; browse = null; } 

您可以使用上述方法启动/停止发现,并通过重置整个发现

 stop(); clearCaches(); start(); 

我从JmDNS切换到mdnsjava,因为JmDNS似乎没有正常工作。 有时它不会发现任何东西。

我对mdnsjava有很好的经验,并且通过添加一个pom.xml并指出了一些简单的bug修复,对它有所贡献。 关于mdnsjava的唯一事情就是它似乎无法完全从头开始重新启动(由于某种原因重置所有正在运行的程序的状态),但只要它启动它对我来说完美无缺。 我没有发现使用它的Android后台服务有任何其他问题。 我向作者指出了重置问题,他说他遇到了同样的问题,如果他有时间,他可能会在某一天看到它。

Interesting Posts