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

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

相关的服务器代码

...
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,他们只看到自己.知道这里发生了什么吗?

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

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

点赞