Отображение null при использовании информации о сетевой службе в NSD

Чтобы узнать список сервисов с помощью класса NSDManager, я реализовал некоторый код со ссылкой на Google, но я не могу получить адрес хоста, когда пытаюсь найти сервисы. Он показывает ноль при запуске Discovery. Я ссылался на эта ссылка для просмотра списка устройств, подключенных к той же сети, на которую я перешел этот блог, чтобы получить доступ ко всем службам при подключении к той же сети.

Верен ли мой подход к получению списка служб/устройств, подключенных к одной сети?

Я попробовал следующий код, чтобы открыть список

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tv=(TextView)findViewById(R.id.mytext);
    mylist=new List<NsdManager.DiscoveryListener>() {
        @Override
        public int size() {
            return s;
        }

        @Override
        public boolean add(NsdManager.DiscoveryListener discoveryListener) {
            return true;
        }

        @Override
        public NsdManager.DiscoveryListener get(int i) {
            return mDiscoveryListener;
        }

        @Override
        public NsdManager.DiscoveryListener set(int i, NsdManager.DiscoveryListener discoveryListener) {
            return mDiscoveryListener;
        }


        @Override
        public NsdManager.DiscoveryListener remove(int i) {
            return mDiscoveryListener;
        }

    };
    nsdList=new ArrayList<>();
    nsdManager = (NsdManager) getSystemService(Context.NSD_SERVICE);
    //broadcaster = LocalBroadcastManager.getInstance(mContext);
    registerService(port);

    initializeResolveListener();
    discoverServices();

}



 public void initializeDiscoveryListener() {
    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 : " + service);
            String serviceType = service.getServiceType();
            mylist.add(mDiscoveryListener);
            nsdList.add(service.getServiceName());

            s++;

            Log.d(TAG, "Service discovery success: " + service.getServiceName());


            boolean isOurService = serviceType.equals(SERVICE_TYPE) || serviceType.equals(SERVICE_TYPE);

            if (!isOurService) {
                Log.d(TAG, "Unknown Service Type: " + service.getServiceType());
            } else if (service.getServiceName().equals(SERVICE_NAME)) {
                Log.d(TAG, "Same machine: " + SERVICE_NAME);
            } else if (service.getServiceName().contains(SERVICE_NAME)) {
                Log.d(TAG, "different machines. (" + service.getServiceName() + "-" +
                        SERVICE_NAME+ ")");
                nsdManager.resolveService(service, mResolveListener);

            }
        }

Зарегистрированный сервис с

public void registerService(int port) {
    NsdServiceInfo serviceInfo = new NsdServiceInfo();
    serviceInfo.setServiceName(SERVICE_NAME);
    serviceInfo.setServiceType(SERVICE_TYPE);
    serviceInfo.setPort(port);

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

мой решительный слушатель

public void initializeResolveListener() {
    mResolveListener = new NsdManager.ResolveListener() {
        @Override
        public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) {
            Log.e(TAG, "Resolve failed" + errorCode);
        }

        @Override
        public void onServiceResolved(NsdServiceInfo serviceInfo) {
            Log.v(TAG, "Resolve Succeeded. " + serviceInfo);
            if (serviceInfo.getServiceName().equals(mService)) {
                Log.d(TAG, "Same IP.");
                return;
            }
            mService = serviceInfo;

            int port = mService.getPort();
            InetAddress host = mService.getHost();            }
    };
}

Когда я пытаюсь выполнить код, он показывает nullпоказывает ноль


person Rognik    schedule 05.05.2017    source источник


Ответы (1)


Когда вы обнаруживаете службу, это просто запись PTR:

_http._tcp.local. type PTR, class IN, myService._http._tcp.local.

Если вам нужна информация о хосте/порте, вы должны разрешить эту запись, даже если она рекламируется вами.

person jfly    schedule 14.05.2017
comment
Я мог получить номер порта и IP-адрес этого конкретного устройства, но я не нашел другие устройства... - person Rognik; 19.05.2017