首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DNS-SD:有"mdnsjava“的经验吗?

DNS-SD:有"mdnsjava“的经验吗?
EN

Stack Overflow用户
提问于 2015-02-12 16:06:18
回答 2查看 2K关注 0票数 4

我现在正在将DNS-DS库"mdnsjava“实现到我的Android-项目中,就像它在几个位置上提到的那样,例如在这里:

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

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

现在我使用jmDNS已经两年了,但是这个库无法在暂停发现的同时保留缓存(应用程序在后台)。

此外,随着设备的发现,jmDNS速度缓慢&不稳定。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-12 12:20:10

同时,我可以说,mdnsjava在大多数情况下都运行得非常好和稳定。与jMDNS相比,情况要好得多,而且速度更快。

下面是一些重新启动整个发现并开始/停止发现的代码,也许它可以帮助某人:

代码语言:javascript
复制
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;
}

您可以使用上述方法开始/停止发现,并通过

代码语言:javascript
复制
stop();
clearCaches();
start();
票数 4
EN

Stack Overflow用户

发布于 2015-03-12 10:31:12

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

--我对mdnsjava有很好的经验,并通过添加pom.xml并指出一些简单的bug修复,对此略有贡献。mdnsjava唯一的特点是,由于某些原因(完全重置运行程序的所有状态),它似乎无法从零开始完全重新启动自己,但只要它处于正常运行状态,它对我就能完美地工作。我没有注意到我的Android后台服务在使用它时还有什么其他问题。我向提交人指出了重置问题,他说他也经历过同样的问题,如果他有时间的话,他可能有一天会考虑这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28482168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档