2016-08-02 12 views
3

NSDを使用して特定のネットワークサービスを見つける際にandroid documentationを読んだことがあります。以下は利用可能なすべてを見つけるための私のコードです_http._tcpサービス。Androidのネイティブネットワークサービスディスカバリを使用してすべての利用可能なサービスを見つける方法

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その章9が言う

+0

ここではすべてのサービスを取得していません。 – sandeepmaaram

2

http://www.ietf.org/rfc/rfc6763.txtを働いていないで、NSD で働い_services._dnsを-sd._udpとあなたのサービスサービス名の列挙を得るためのサービス名として。これはNSDでも動作します

関連する問題