我现在正在将DNS-DS库"mdnsjava“实现到我的Android-项目中,就像它在几个位置上提到的那样,例如在这里:
除了JMDNS之外,还有其他用于bonjour/zeroconf的Java库吗?。
在实现时,我想知道这个实现是否真的在使用任何缓存和/或它可能执行的稳定程度。
现在我使用jmDNS已经两年了,但是这个库无法在暂停发现的同时保留缓存(应用程序在后台)。
此外,随着设备的发现,jmDNS速度缓慢&不稳定。
那么,有没有人有过mdnsjava的经验?
发布于 2015-03-12 12:20:10
同时,我可以说,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();发布于 2015-03-12 10:31:12
我从JmDNS转到mdnsjava,因为JmDNS似乎没有正常工作。有时它不会发现任何东西。
--我对mdnsjava有很好的经验,并通过添加pom.xml并指出一些简单的bug修复,对此略有贡献。mdnsjava唯一的特点是,由于某些原因(完全重置运行程序的所有状态),它似乎无法从零开始完全重新启动自己,但只要它处于正常运行状态,它对我就能完美地工作。我没有注意到我的Android后台服务在使用它时还有什么其他问题。我向提交人指出了重置问题,他说他也经历过同样的问题,如果他有时间的话,他可能有一天会考虑这个问题。
https://stackoverflow.com/questions/28482168
复制相似问题