Как найти все доступные службы с помощью встроенного в Android средства обнаружения сетевых служб

Я прочитал документацию по поиску определенных сетевых служб с помощью НСД. Ниже приведен мой код для обнаружения всех доступных сервисов _http._tcp.

final NsdManager.DiscoveryListener discoveryListener = new NsdManager.DiscoveryListener() {
    @Override
    public void onDiscoveryStarted(String s) {
        Log.i(TAG, "onDiscoveryStarted: " + s);
    }

    @Override
    public void onServiceFound(NsdServiceInfo nsdServiceInfo) {
        Log.i(TAG, "onServiceFound: " + nsdServiceInfo.toString());
    }

    @Override
    public void onServiceLost(NsdServiceInfo nsdServiceInfo) {
        Log.i(TAG, "onServiceLost: " + nsdServiceInfo.toString());
    }

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

    @Override
    public void onStartDiscoveryFailed(String s, int i) {
        Log.i(TAG, "onStartDiscoveryFailed: " + s);
    }

    @Override
    public void onStopDiscoveryFailed(String s, int i) {
        Log.i(TAG, "onStopDiscoveryFailed: " + s);
    }
};

final NsdManager manager = (NsdManager) getSystemService(Context.NSD_SERVICE);
manager.discoverServices("_http._tcp", NsdManager.PROTOCOL_DNS_SD, discoveryListener);

До этого момента все работает нормально. Однако мне интересно, как найти все доступные службы в сети, используя этот подход? Я вижу, что существует дюжина различных сервисов (например, _ipp._tcp, _airport._tcp, _airplay._tcp, _atc. _tcp и многие другие), доступные в моей локальной сети с помощью ZeroConf для просмотра приложений, найденных в Google PlayStore.

Есть ли подстановочный знак, который позволяет собрать все доступные сервисы через один прослушиватель обнаружения, поскольку я не смог найти такую ​​​​информацию на страницах разработчиков?


person waqaslam    schedule 02.08.2016    source источник
comment
Вы случайно не нашли решения этой проблемы?   -  person Rebirth    schedule 24.09.2016
comment
@Возрождение К сожалению, нет. Однако, если вы не хотите использовать NDS Android, возможно, использование сторонней библиотеки, такой как JmDNS, будет хороший вариант для достижения этого.   -  person waqaslam    schedule 25.09.2016


Ответы (2)


измените свой сервис с помощью _services._dns-sd._udp, у меня тоже есть, и он работает в nsd, но в jmdns он не работает

person Michael Indra Pramana    schedule 12.10.2016
comment
Здесь не получают все услуги. - person sandeepmaaram; 16.05.2017
comment
Извините за изменение, но как называется этот спецификатор и где он задокументирован? Спасибо - person Benjamin; 11.06.2019

http://www.ietf.org/rfc/rfc6763.txt в главе 9 говорится: вы должны использовать _services._dns-sd._udp в качестве имени службы, чтобы получить перечисление имен служб. Это также работает с NSD

person Flo    schedule 31.10.2016