NSNetService / Bonjour发现仅适用于iPhone模拟器

时间:2012-06-13 18:47:19

标签: ios bonjour nsnetservice

我正在开发一款需要基本客户端/服务器交互模型的iPhone应用程序。为此,我将使用Bonjour和NSNetService以及NSNetServiceBrowser来发现同一网络上的其他人。我已经遵循了几个不同的指南,这些指南或多或少都有相同的示例代码。

相关服务器代码

...
serverName = [[UIDevice currentDevice] name];
netService = [[NSNetService alloc] initWithDomain:@"local."
                                             type:@"_myservice._tcp."
                                             name:serverName
                                             port:port];
...

服务成功发布,即我获得netServiceDidPublish:callback

相关浏览器代码

...
browser = [[NSNetServiceBrowser alloc] init];
[browser setDelegate:delegate];
[browser searchForServicesOfType:@"_myservice._tcp." 
                        inDomain:@"local."];
...

现在所有这一切的结果都很有趣:

  1. 在iPhone上运行,设备只能看到自己发布的NSNetService。
  2. 在2台iPhone上运行,两台设备都无法看到对方的NSNet服务。
  3. 在iPhone模拟器上运行,它会找到所有 NSNetServices,包括它自己的。
  4. iPhone模拟器的屏幕截图

    enter image description here

    我在这里不知所措......模拟器正如预期的那样完全。然而,在设备上它不是,我不能在相同的WiFi上看到彼此2个不同的iPhone,他们只看到自己。知道这里发生了什么吗?

1 个答案:

答案 0 :(得分:2)

事实证明,我所使用的路由器默认启用了“SPI防火墙”。关闭它解决了这个问题。

我仍然很好奇的一件事是:为什么来自我的Mac,iPhone模拟器和Bonjour浏览器的请求能够通过这个防火墙但是有3种不同的iPhone?

相关问题