我正在开发一款需要基本客户端/服务器交互模型的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."];
...
现在所有这一切的结果都很有趣:
iPhone模拟器的屏幕截图
我在这里不知所措......模拟器正如预期的那样完全。然而,在设备上它不是,我不能在相同的WiFi上看到彼此2个不同的iPhone,他们只看到自己。知道这里发生了什么吗?
答案 0 :(得分:2)
事实证明,我所使用的路由器默认启用了“SPI防火墙”。关闭它解决了这个问题。
我仍然很好奇的一件事是:为什么来自我的Mac,iPhone模拟器和Bonjour浏览器的请求能够通过这个防火墙但是有3种不同的iPhone?