7

NSDを使用して特定のネットワークサービスを見つけることに関する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);

この時点まで、すべてが正常に機能しています。ただし、このアプローチを使用して、ネットワーク上で利用可能なすべてのサービスを見つける方法を知りたいですか? Google PlayStore で見つけたZeroConfブラウジング アプリを使用して、ローカル ネットワークで利用できるさまざまなサービス (例: _ipp._tcp_airport._tcp_airplay._tcp_atc._tcpなど) が多数あることがわかります。

開発者ページでそのような情報を見つけることができなかったので、単一のディスカバリ リスナーを介して利用可能なすべてのサービスを収集できるワイルドカードはありますか?

4

2 に答える 2

5

_services._dns-sd._udp でサービスを変更します

于 2016-10-12T09:16:18.247 に答える
5

http://www.ietf.org/rfc/rfc6763.txt第 9 章では、サービス名の列挙を取得するには、サービス名として _services._dns-sd._udp を使用する必要があると述べています。これはNSDでも機能します

于 2016-10-31T23:14:39.907 に答える