如何使用Android的本机网络服务发现查找所有可用服务

waq*_*lam 6 networking android zeroconf discovery nsd

我已经阅读了使用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);
Run Code Online (Sandbox Code Playgroud)

直到这一点,一切正常.但是,我想知道如何使用这种方法在网络上找到所有可用的服务?我可以看到在我的本地网络上使用Google PlayStore上的ZeroConf浏览应用程序提供了十几种不同的服务(例如_ipp._tcp,_airport._tcp,_airplay._tcp,_atc._tcp等等).

是否有任何通配符允许通过单个发现 - 侦听器收集所有可用服务,因为我在开发人员页面上找不到此类信息?

小智 5

我也用_services._dns-sd._udp更改服务,它在nsd中有效,但在jmdns中不起作用


小智 5

http://www.ietf.org/rfc/rfc6763.txt第9章说,您应使用_services._dns-sd._udp作为服务名称来获得服务名称的枚举。这也适用于NSD