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

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

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

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

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

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

1 ответ

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

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

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

Другие вопросы по тегам