Android Native Service Discovery를 사용하여 애플리케이션을 실행하려고하지만 애플리케이션을 실행할 때 네트워크에서 모든 서비스를 찾지 못하는 경우가 있습니다. 저는 4 개의 은하계 연결을 사용하여 https://github.com/joeluchoa/nsd에서 코드를 실행하고 있으며, 동시에 각각 다른 수의 서비스를 발견합니다. 내가 NsdManager에서 메소드 registerService를 사용하여 게시 그런Android NSD가 모든 서비스를 검색하지 못함
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);
:
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를 사용하는 서비스를 검색하려면 기본적으로
나는 ServerSocket를 가진 서비스를 실행 :
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);
}
};
내가 잘못 했나요? 아무도 이것에 대한 해결책이나 해결책을 알고 있습니까?
희망이 도움 그래서, 돈 ' 아직 답을 얻지 못했지만, 귀하의 성명서에서 귀하가 해결하지 못한 정보를 얻으려는 것에 주목합니다. –
모든 개발자가 catch를 사용하거나 오류를 찾기 위해 모든 변수를 출력하는 일반적인 방법은 –
입니다.이 예에서는 SERVICE_TYPE (예 : http 웹 서버) 서비스 만 검색하고 있습니다. –