android自带的nsd发现服务器,Android NSD不会发现所有服务

我试图运行一个应用程序使用Android本地服务发现,但有时当我运行该应用程序,它不会发现我的网络的所有服务。我运行的代码从

https://github.com/joeluchoa/nsd使用四个星系nexus和大多数时间,他们发现不同数量的服务在同一时间。

基本上我运行一个服务与ServerSocket:

ServerSocket server = new ServerSocket(0);

Log.i(TAG, "IP " + server.getInetAddress()

+ ", running on port " + server.getLocalPort());

Intent intent = new Intent(MySocket.this,

MyPresence.class);

intent.putExtra("PORT", server.getLocalPort());

startService(intent);

然后我使用方法registerService从NsdManager发布它:

NsdServiceInfo serviceInfo = new NsdServiceInfo();

serviceInfo.setServiceName(Build.SERIAL + "-" + new Date().getTime());

serviceInfo.setServiceType(SERVICE_TYPE);

serviceInfo.setPort(port);

mNsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD,

mRegistrationListener);

要发现服务,我使用方法discoverServices从NsdManager:

mNsdManager.discoverServices(SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD,

mDiscoveryListener);

使用mDiscoveryListener如下:

mDiscoveryListener = new NsdManager.DiscoveryListener() {

@Override

public void onDiscoveryStarted(String regType) {

Log.d(TAG, "Service discovery started");

}

@Override

public void onServiceFound(NsdServiceInfo service) {

Log.d(TAG, "Service discovery success");

Log.d(TAG, String.format("%s %s %s %d",

service.getServiceName(), service.getServiceType(),

service.getHost(), service.getPort()));

if (!service.getServiceType().contains(SERVICE_TYPE)) {

Log.d(TAG,

"Unknown Service Type: " + service.getServiceType());

} else if (service.getServiceName().equals(mServiceName)) {

Log.d(TAG, "Same machine: " + mServiceName);

} else {

mNsdManager.resolveService(service, mResolveListener);

}

}

@Override

public void onServiceLost(NsdServiceInfo service) {

Log.e(TAG, "service lost" + service);

}

@Override

public void onDiscoveryStopped(String serviceType) {

Log.i(TAG, serviceType + " Discovery stopped: " + serviceType);

}

@Override

public void onStartDiscoveryFailed(String serviceType, int errorCode) {

Log.e(TAG, serviceType + " Discovery failed: Error code:"

+ errorCode);

mNsdManager.stopServiceDiscovery(this);

}

@Override

public void onStopDiscoveryFailed(String serviceType, int errorCode) {

Log.e(TAG, serviceType + " Discovery failed: Error code:"

+ errorCode);

mNsdManager.stopServiceDiscovery(this);

}

};

我做错了什么?有人知道一个解决方案或解决方法吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值