4

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

在此处输入图像描述

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

4

1 回答 1

2

原来我使用的路由器默认启用了“SPI防火墙”。关闭它解决了这个问题。

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

于 2012-06-13T22:06:13.013 回答