繁体   English   中英

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

[英]NSNetService/Bonjour discovery only works on iPhone simulator

我正在开发一个需要基本客户端/服务器交互模型的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."];
...

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

  1. 在iPhone上运行,该设备只能看到其自己发布的NSNetService。
  2. 在两部iPhone上运行时,两台设备都看不到对方的NSNetService。
  3. 运行在iPhone Simulator上,它将找到所有 NSNetServices,包括它自己的。

iPhone Simulator的屏幕截图

在此处输入图片说明

我有点不知所措...模拟器完全按预期工作。 但是在设备上却不是,我无法在同一WiFi上让两部不同的iPhone互相看到,它们只能看到自己。 知道这里发生了什么吗?

原来,我所在的路由器默认情况下启用了“ SPI防火墙”。 将其关闭可以解决问题。

我仍然好奇的一件事是:来自我的Mac(iPhone模拟器和Bonjour浏览器)的请求如何能够通过此防火墙,而3部不同的iPhone却无法通过?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM