2016-08-02 11 views
3

Я прочитал android documentation о поиске определенных сетевых сервисов с использованием NSD. Ниже приведен мой код, чтобы открыть все доступные услуги _http._tcp.Как найти все доступные сервисы с помощью собственного сетевого сервиса Android Service Discovery

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.

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

+0

Вы случайно нашли решение этой проблемы? – Rebirth

+0

@Rebirth К сожалению, нет. Однако, если вы не хотите использовать NDS андроида, возможно, с помощью сторонней библиотеки, такой как [JmDNS] (http://jmdns.sourceforge.net/), будет хорошим вариантом для достижения этой цели. – waqaslam

ответ

2

изменить ваш сервис с _services._dns-sd._udp я слишком, и он работает в НРД но в jmdns ее не работает

+0

Здесь не получают все услуги. – sandeepmaaram

2

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