如何使用 Android 的本地网络服务发现找到所有可用服务
How to find all available services using Android's native Network Service Discovery
我已通读 android documentation 关于使用 NSD 查找特定网络服务的内容。下面是我发现所有可用 _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。
由于我在开发者页面上找不到此类信息,是否有任何通配符允许通过单个发现侦听器收集所有可用服务?
使用 _services._dns-sd._udp 更改您的服务
我也有,它在 nsd 工作
但在 jmdns 中它不起作用
http://www.ietf.org/rfc/rfc6763.txt 第 9 章说,您应该使用 _services._dns-sd._udp 作为服务名称来获取服务名称的枚举。这也适用于 NSD
我已通读 android documentation 关于使用 NSD 查找特定网络服务的内容。下面是我发现所有可用 _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。
由于我在开发者页面上找不到此类信息,是否有任何通配符允许通过单个发现侦听器收集所有可用服务?
使用 _services._dns-sd._udp 更改您的服务 我也有,它在 nsd 工作 但在 jmdns 中它不起作用
http://www.ietf.org/rfc/rfc6763.txt 第 9 章说,您应该使用 _services._dns-sd._udp 作为服务名称来获取服务名称的枚举。这也适用于 NSD