首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

局域網服務發現實戰:Android NSD / Bonjour 實現無需 IP 直連的 Socket 通信

     編輯:程式設計疑難解答

核心技術:Network Service Discovery (NSD)

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:port

跨平台兼容

  • 電腦端運行支持 Bonjour 的服務(Java JmDNS、Python zeroconf、Node bonjour)。
  • iOS 使用 NetService/NetServiceBrowser 同樣協議互通。

降級方案

若不支持 mDNS,可使用 UDP 廣播(255.255.255.255:port)發送服務公告,客戶端監聽廣播獲取 IP。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved