我正在研究需要基本客戶端/服務器交互模型的iPhone應用程序。爲此,我將使用Bonjour和NSNetService以及NSNetServiceBrowser來發現同一網絡上的其他人。我跟着幾個不同的指南,或多或少具有相同的示例代碼。NSNetService/Bonjour發現只適用於iPhone模擬器
相關服務器代碼
...
serverName = [[UIDevice currentDevice] name];
netService = [[NSNetService alloc] initWithDomain:@"local."
type:@"_myservice._tcp."
name:serverName
port:port];
...
服務發佈成功,也就是我得到的netServiceDidPublish:回調
相關的瀏覽器代碼
...
browser = [[NSNetServiceBrowser alloc] init];
[browser setDelegate:delegate];
[browser searchForServicesOfType:@"_myservice._tcp."
inDomain:@"local."];
...
現在的這一切結果很有趣:
- 在iPhone上運行時,設備只能看到自己發佈的NSNetService。
- 在2臺iPhone上運行,兩臺設備都無法看到對方的NSNetService。
- 運行在iPhone模擬器上,它會發現所有的 NSNetServices,包括它自己的。 iPhone模擬器
的
截圖我在虧損還算是這裏...該模擬器工作完全按預期。然而,在設備上它不是,我不能在同一個WiFi上看到2個不同的iPhone來看對方,他們只看到自己。任何想法發生了什麼?
您可以嘗試從商店購買免費的Bonjour瀏覽器應用程序,以驗證它不是網絡中的連接問題,即阻塞的端口(5353)。 – nobre
我試過在OSX和iOS上免費的Bonjour瀏覽應用程序。在OSX上它發現我發佈的所有服務。使用手機上的瀏覽器應用程序無法找到任何服務。我開始認爲我錯過了一個額外的配置步驟來啓用設備上的發現。 – nrj