赫謙小便籤

在iOS中透過Bonjour搜尋Domains以及服務

Bonjour是蘋果的一個類似DNS的服務,適用於區域網路之中,所以在Mac OS X, iOS中都可以看到它的身影,且在一些印表機之中也看得到。

今天我們就來嘗試用Bonjour來搜尋同一個區域網路底下有哪些服務吧。

記得在.h檔中引入<Foundation/NSNetworkServices.h>,然後它需要一個delegate來代理整個回呼(Callback)的執行,所以必須要採用NSNetServiceBrowserDelegate這個Protocol。

之後,我們可以透過實體化NSNetServiceBrowser來進行Domain的搜索:

1
2
3
  NSNetServiceBrowser *browser = [NSNetServiceBrowser new];
  [browser setDelegate: self];
  [browser searchForRegistrationDomains];

之後我們要實作以下五個delegate methods:

  • netServiceBrowserWillSearch: // 開始搜尋
  • netServiceBrowserDidStopSearch: // 停止搜尋
  • netServiceBrowser:didNotSearch: // 搜尋如果失敗
  • netServiceBrowser:didFindDomain:moreComing: // 如果有找到的話
  • netServiceBrowser:didRemoveDomain:moreComing: // 如果某個Domain消失的話

舉個netServiceBrowser:didFindDomain:moreComing:的例子:

1
2
3
4
5
6
7
- (void)netServiceBrowser:(NSNetServiceBrowser *)browser
            didFindDomain:(NSString *)domainString
               moreComing:(BOOL)moreComing{
  NSLog(@"[ADD] Domain String: %@", domainString);
  if(!moreComing){
  }
}

如此一來,我們可以在moreComing為false的時候更新我們的UI列表即可。

之後,再來繼續撰寫怎樣搜尋服務。

Comments