Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 注册android后未找到NsdManager服务_Java_Android_Service_Nsd - Fatal编程技术网

Java 注册android后未找到NsdManager服务

Java 注册android后未找到NsdManager服务,java,android,service,nsd,Java,Android,Service,Nsd,我最近开始研究Android提供的网络服务发现 我在同一个网络上连接了两个应用程序。将向此类注册服务: public class NsdRegister { private Context mContext; private NsdManager mNsdManager; private NsdManager.RegistrationListener mRegistrationL

我最近开始研究Android提供的网络服务发现

我在同一个网络上连接了两个应用程序。将向此类注册服务:

public class NsdRegister {

private Context                             mContext;

private NsdManager                          mNsdManager;
private NsdManager.RegistrationListener     mRegistrationListener;

public String                               mServiceName = "NsdServer1";
public static final String                  SERVICE_TYPE = "_http._tcp.";

public NsdHelper(Context context) {
    mContext = context;
    mNsdManager = (NsdManager) context.getSystemService(Context.NSD_SERVICE);
}


public void initializeRegistrationListener() {
    mRegistrationListener = new NsdManager.RegistrationListener() {

        @Override
        public void onServiceRegistered(NsdServiceInfo NsdServiceInfo) {
            mServiceName = NsdServiceInfo.getServiceName();
            System.out.println(mServiceName);
        }

        @Override
        public void onRegistrationFailed(NsdServiceInfo arg0, int arg1) {
            System.out.println(arg0.toString());
            System.out.println("Failed " + arg1);
        }

        @Override
        public void onServiceUnregistered(NsdServiceInfo arg0) {
        }

        @Override
        public void onUnregistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
        }
    };
}

public void registerService() {
    initializeRegistrationListener();
    NsdServiceInfo serviceInfo  = new NsdServiceInfo();
    serviceInfo.setPort(5906);
    serviceInfo.setServiceName(mServiceName);
    serviceInfo.setServiceType(SERVICE_TYPE);
    mNsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD, mRegistrationListener);
}

public void tearDown() {
    mNsdManager.unregisterService(mRegistrationListener);
}
}
public class NsdHelper {

public static final String                  SERVICE_TYPE = "_http._tcp.";
public static final String                  TAG = "NsdHelper";
public static final String                  SERVER_AIO = "NsdServer1";

private Context                             mContext;

private NsdManager                          mNsdManager;
private NsdManager.DiscoveryListener        mDiscoveryListener;

private NsdServiceInfo                      mService;

public NsdHelper(Context context) {
    mContext = context;
    mNsdManager = (NsdManager) context.getSystemService(Context.NSD_SERVICE);
}

private void initializeDiscoveryListener() {
    mDiscoveryListener = new NsdManager.DiscoveryListener() {

        @Override
        public void onDiscoveryStarted(String regType) {
            Log.d(TAG, "Service discovery started");
        }

        @Override
        public void onServiceFound(NsdServiceInfo service) {
            if (service.getServiceName().equals(SERVER_AIO)) {
                mNsdManager.resolveService(service, new NsdManager.ResolveListener() {
                    @Override
                    public void onResolveFailed(NsdServiceInfo nsdServiceInfo, int i) {
                        System.out.println("Failed to resolve");
                    }

                    @Override
                    public void onServiceResolved(NsdServiceInfo nsdServiceInfo) {
                        stopDiscovery();
                        System.out.println(nsdServiceInfo.getHost().getHostAddress());
                    }
                });
            }
        }

        @Override
        public void onServiceLost(NsdServiceInfo service) {
            Log.e(TAG, "service lost" + service);
            if (mService == service) {
                mService = null;
            }
        }

        @Override
        public void onDiscoveryStopped(String serviceType) {
            Log.i(TAG, "Discovery stopped: " + serviceType);
        }

        @Override
        public void onStartDiscoveryFailed(String serviceType, int errorCode) {
            Log.e(TAG, "Discovery failed: Error code:" + errorCode);
            mNsdManager.stopServiceDiscovery(this);
        }

        @Override
        public void onStopDiscoveryFailed(String serviceType, int errorCode) {
            Log.e(TAG, "Discovery failed: Error code:" + errorCode);
            mNsdManager.stopServiceDiscovery(this);
        }
    };
}

public void discoverServices() {
    initializeDiscoveryListener();
    mNsdManager.discoverServices(SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, mDiscoveryListener);
}

public void stopDiscovery() {
    mNsdManager.stopServiceDiscovery(mDiscoveryListener);
}
}
另一个应用程序将使用此类发现网络上的所有服务:

public class NsdRegister {

private Context                             mContext;

private NsdManager                          mNsdManager;
private NsdManager.RegistrationListener     mRegistrationListener;

public String                               mServiceName = "NsdServer1";
public static final String                  SERVICE_TYPE = "_http._tcp.";

public NsdHelper(Context context) {
    mContext = context;
    mNsdManager = (NsdManager) context.getSystemService(Context.NSD_SERVICE);
}


public void initializeRegistrationListener() {
    mRegistrationListener = new NsdManager.RegistrationListener() {

        @Override
        public void onServiceRegistered(NsdServiceInfo NsdServiceInfo) {
            mServiceName = NsdServiceInfo.getServiceName();
            System.out.println(mServiceName);
        }

        @Override
        public void onRegistrationFailed(NsdServiceInfo arg0, int arg1) {
            System.out.println(arg0.toString());
            System.out.println("Failed " + arg1);
        }

        @Override
        public void onServiceUnregistered(NsdServiceInfo arg0) {
        }

        @Override
        public void onUnregistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
        }
    };
}

public void registerService() {
    initializeRegistrationListener();
    NsdServiceInfo serviceInfo  = new NsdServiceInfo();
    serviceInfo.setPort(5906);
    serviceInfo.setServiceName(mServiceName);
    serviceInfo.setServiceType(SERVICE_TYPE);
    mNsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD, mRegistrationListener);
}

public void tearDown() {
    mNsdManager.unregisterService(mRegistrationListener);
}
}
public class NsdHelper {

public static final String                  SERVICE_TYPE = "_http._tcp.";
public static final String                  TAG = "NsdHelper";
public static final String                  SERVER_AIO = "NsdServer1";

private Context                             mContext;

private NsdManager                          mNsdManager;
private NsdManager.DiscoveryListener        mDiscoveryListener;

private NsdServiceInfo                      mService;

public NsdHelper(Context context) {
    mContext = context;
    mNsdManager = (NsdManager) context.getSystemService(Context.NSD_SERVICE);
}

private void initializeDiscoveryListener() {
    mDiscoveryListener = new NsdManager.DiscoveryListener() {

        @Override
        public void onDiscoveryStarted(String regType) {
            Log.d(TAG, "Service discovery started");
        }

        @Override
        public void onServiceFound(NsdServiceInfo service) {
            if (service.getServiceName().equals(SERVER_AIO)) {
                mNsdManager.resolveService(service, new NsdManager.ResolveListener() {
                    @Override
                    public void onResolveFailed(NsdServiceInfo nsdServiceInfo, int i) {
                        System.out.println("Failed to resolve");
                    }

                    @Override
                    public void onServiceResolved(NsdServiceInfo nsdServiceInfo) {
                        stopDiscovery();
                        System.out.println(nsdServiceInfo.getHost().getHostAddress());
                    }
                });
            }
        }

        @Override
        public void onServiceLost(NsdServiceInfo service) {
            Log.e(TAG, "service lost" + service);
            if (mService == service) {
                mService = null;
            }
        }

        @Override
        public void onDiscoveryStopped(String serviceType) {
            Log.i(TAG, "Discovery stopped: " + serviceType);
        }

        @Override
        public void onStartDiscoveryFailed(String serviceType, int errorCode) {
            Log.e(TAG, "Discovery failed: Error code:" + errorCode);
            mNsdManager.stopServiceDiscovery(this);
        }

        @Override
        public void onStopDiscoveryFailed(String serviceType, int errorCode) {
            Log.e(TAG, "Discovery failed: Error code:" + errorCode);
            mNsdManager.stopServiceDiscovery(this);
        }
    };
}

public void discoverServices() {
    initializeDiscoveryListener();
    mNsdManager.discoverServices(SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, mDiscoveryListener);
}

public void stopDiscovery() {
    mNsdManager.stopServiceDiscovery(mDiscoveryListener);
}
}
注册很顺利,但发现找不到我的服务。我在同一网络上连接了这两个应用程序

我不知道问题出在哪里

请帮帮我


谢谢

这对我来说非常有效

客户

服务器