gpt4 book ai didi

Android NSD 未发现所有服务

转载 作者:IT老高 更新时间:2023-10-28 21:56:30 26 4
gpt4 key购买 nike

我正在尝试使用 Android Native Service Discovery 运行应用程序,但有时当我运行该应用程序时,它不会从我的网络中发现所有服务。我正在运行 https://github.com/joeluchoa/nsd 中的代码使用四个星系联结,大多数时候每个星系同时发现不同数量的服务。

基本上我使用 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);

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

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);

为了发现服务,我使用 NsdManager 中的 discoverServices 方法:

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);
}
};

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

最佳答案

要发现连接网络的所有服务,只需更改您正在发现的服务类型,

public static final String SERVICE_TYPE = "_services._dns-sd._udp";

关于Android NSD 未发现所有服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12799615/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com