首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >主机在NsdServiceInfo of NsdManager.DiscoveryListener.onServiceFound中为空

主机在NsdServiceInfo of NsdManager.DiscoveryListener.onServiceFound中为空
EN

Stack Overflow用户
提问于 2013-08-07 04:30:45
回答 1查看 5.7K关注 0票数 9

我试图将NsdServiceInfo的NsdServiceInfo作为参数传递给NsdManager.DiscoveryListener.onServiceFound(),但它是空的。我有两个android设备,其中设备1是服务器,设备2是客户端。

我就是这样在设备1中注册服务器的。

代码语言:javascript
复制
public void registerService(int port, InetAddress myIp) {
    NsdServiceInfo serviceInfo  = new NsdServiceInfo();
    serviceInfo.setPort(port);
    serviceInfo.setServiceName(this.serviceName);
    serviceInfo.setServiceType(SERVICE_TYPE);
    serviceInfo.setHost(myIp);

    this.nsdManager.registerService(
            serviceInfo, NsdManager.PROTOCOL_DNS_SD, registrationListener);
}

这就是我初始化DiscoveryListener的方式

代码语言:javascript
复制
public void initializeDiscoveryListener() {
    discoveryListener = new NsdManager.DiscoveryListener() {

        @Override
        public void onServiceFound(NsdServiceInfo service) {
            Log.d(TAG, "Service discovery success" + service);
            if (!service.getServiceType().equals(SERVICE_TYPE)) {
                Log.d(TAG, "Unknown Service Type: " + service.getServiceType());
            } else if (service.getHost() == myIp) {
                Log.d(TAG, "Same machine: " + service.getHost());
            } else if (service.getServiceName().contains(serviceName)){
                nsdManager.resolveService(service, resolveListener);
            }
        }
   ...
   }
}

但是service.getHost()返回null。

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-25 01:25:11

我刚刚遇到了同样的问题,并设法从谷歌的网页上解决了它的网络发现。

http://developer.android.com/training/connect-devices-wirelessly/nsd.html

问题是,当发现服务时,不知道连接信息。您必须先解决它,然后getHost()才能工作。

你已经有了台词:

代码语言:javascript
复制
    nsdManager.resolveService(service, resolveListener);

resolveListener变量包含成功和失败的回调。当成功确定连接信息时,您希望使用getHost()。下面是来自Google的解决方案侦听器:

代码语言:javascript
复制
    public void initializeResolveListener() {
        resolveListener = new NsdManager.ResolveListener() {

        @Override
        public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) {
            // Called when the resolve fails.  Use the error code to debug.
            Log.e(TAG, "Resolve failed" + errorCode);
        }

        @Override
        public void onServiceResolved(NsdServiceInfo serviceInfo) {
            Log.e(TAG, "Resolve Succeeded. " + serviceInfo);

            if (serviceInfo.getServiceName().equals(mServiceName)) {
                Log.d(TAG, "Same IP.");
                return;
            }
            service = serviceInfo;
            int port = service.getPort();
            InetAddress host = service.getHost(); // getHost() will work now
        }
    };
}
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18094704

复制
相关文章

相似问题

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