Android 4.1+ 提供 NsdManager 基於 mDNS (Bonjour) 實現服務發現與解析。
NsdServiceInfo serviceInfo = new NsdServiceInfo();
serviceInfo.setServiceName("MyFileTransfer");
serviceInfo.setServiceType("_myapp._tcp.");
serviceInfo.setPort(port);
nsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD, registrationListener);nsdManager.discoverServices("_myapp._tcp.", NsdManager.PROTOCOL_DNS_SD, discoveryListener);
// discoveryListener.onServiceFound(serviceInfo) ->
nsdManager.resolveService(serviceInfo, resolveListener);
// resolveListener.onServiceResolved(resolvedInfo) ->
String host = resolvedInfo.getHost().getHostAddress();
int port = resolvedInfo.getPort();
// 建立 Socket 連接 host:portJmDNS、Python zeroconf、Node bonjour)。NetService/NetServiceBrowser 同樣協議互通。若不支持 mDNS,可使用 UDP 廣播(255.255.255.255:port)發送服務公告,客戶端監聽廣播獲取 IP。