我正在开发一款需要基本客户端/服务器交互模型的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不是?