2012-11-23 73 views
5

在iPhone上(服務器),我試圖發佈服務和我的代碼跑進NSNetService對象的委託方法:NSNetServiceBrowser沒有找到發佈的服務

-(void)netServiceDidPublish:(NSNetService *)sender 

所以,我相信,我的服務@"_chatty._tcp."已成功發佈。然後在另一部iPhone(客戶端),我用NSNetServiceBrowser找到我的服務,但它並沒有碰上委託方法:

-(void)netServiceBrowser:(NSNetServiceBrowser *)netServiceBrowser didFindService:(NSNetService *)netService moreComing:(BOOL)moreServicesComing 

我發現與我的情況下,本網站的一些問題,大多數的答案提醒檢查委託對象是否超出範圍。我敢肯定,我代表工作得很好,因爲它遇到了像另一個委託方法:

-(void)netServiceBrowserWillSearch:(NSNetServiceBrowser *)aNetServiceBrowser 

任何人可以幫助我找出原因?

這裏是我的代碼的某些部分:

我初始化這樣的服務:

#define MY_PROTOCOL @"_chatty._tcp." 

self.myService = [[NSNetService alloc] 
        initWithDomain:@"" type:MY_PROTOCOL 
        name:@"thaith" port:self.port]; 

端口與在瀏覽器類的指定listeningSocket初始化:

NSNetServiceBrowser* finder = [[NSNetServiceBrowser alloc] init]; 

//I also retain the finder. 
finder.delegate = self; 

[finder searchForServicesOfType:MY_PROTOCOL inDomain:@""]; 
+0

我也遇到了同樣的問題...您是否找到了解決方案? –

回答

0

我會縮小範圍並嘗試找到問題所在。首先,瞭解服務是否正確發佈。在發佈服務的同一本地網絡中的計算機上使用Bonjour Browser應用程序(您可以在Internet中找到它)。我希望你在同一個本地網上發佈和瀏覽。如果Bonjour瀏覽器可以看到你的服務,那麼你知道它正確發佈。然後在瀏覽器端連接到它。

+0

感謝您的建議,是的,我在委託方法 - (無效)netServiceDidPublish:(NSNetService *)發件人做了一個斷點,它遇到它,所以我認爲我的服務公開成功。它只是沒有運行到委託didFIndService –

0

可能的解決方案

  1. 同時檢查無線網絡標識符相同
  2. 檢查都是在同一WiFi網絡
  3. 檢查分配爲同一類NSNetServiceBrowser委託

最後下載sam請登錄Apple.Developer Witap Application,安裝在兩臺設備上,測試並確認其正常工作。

+1

我已經檢查了Witap的例子,它似乎什麼都不做,就像我的應用程序。我也檢查wifi地址和我手動配置,使他們相同的網絡,但仍然無法正常工作,我的應用程序和witap應用程序。 –

9

遇到同樣的問題後放棄了一個月。我剛剛回來解決它:

即使the sample code in the docs似乎暗示,否則,不使用本地變量 NSNetServiceBrowser。一旦它超出範圍,它就會被垃圾收集。使finder成爲一個實例變量或屬性,所以它堅持到底。我沒有發現這一點,因爲netServiceBrowserWillSearch:代表被調用,所以我認爲一切正常......

+0

這裏有一個很好的代碼示例:https://github.com/thesecretlab/LearningCocoa3rdEd/blob/ecc8d34b151c116c4fc3b3296b3c0df1e57171d5/iTunesDetector/iTunesDetector/AppDelegate.m – Ryan

+0

謝謝。這解決了我的問題。 – david72

1

,而無需下載卓悅瀏覽器,我建議使用終端命令:

dns-sd -B _chatty._tcp local. 

對於我來說,這表明服務器端工作正常。 目前,我可以在我的應用程序啓動時找到服務,我唯一的問題是,一旦我停止服務器,我得到「已刪除」事件,但再次運行它,我無法再發現它。我知道問題出在我的客戶端上,這要感謝dns-sd - B

相關問題