2012-03-19 67 views
5

我正在实现一个iPhone/iPad应用程序,允许用户使用bonjour协议发送其他消息。基本上,服务器通过bonjour发布他的服务,并且连接到相同wifi的客户端可以发现他的服务并连接到它以开始发送消息。我发现的问题是一些路由器似乎与Bonjour有问题。在家中或其他地方运行我的应用程序时,它可以很好地工作。 bonjour服务的发布和发现完美无瑕。然而,当我在我朋友的一个公寓里尝试我的应用程序时,一些(不是所有)客户都无法发现公布的bonjour服务。我还注意到其他使用Bonjour的应用程序(例如Apple的Remote应用程序)也在上述网络中遇到麻烦。在做了一些挖掘之后,我发现其他人对bonjour和一些路由器也有类似的问题。因此,我有2个问题:替代使用Bonjour协议的iPhone对等

1)有谁知道这个问题,卓悦,有些路由器似乎是一个普遍的问题?换句话说,如果我的应用程序依赖于Bonjour来完成功能,那么我是否必须担心它在WLAN网络的50%中无法工作,或者大多数路由器是否对Bonjour没有任何问题。显然,我不能指望任何人知道每个路由器如何处理bonjour数据包,但也许有一些网络专家可以指出我正确的方向:-p。

2)其次,如果Bonjour是太冒险了一个协议来建立我的应用程序,都有些什么替代品具有类似的功能?我会(最好)需要的功能将是服务发布和发现,而无需用户手动输入其他电话的IP地址。

好的谢谢你的帮助!我明白这是一个广泛的问题,但任何帮助表示赞赏! :)

+0

你能检查路由器是否有一个启用客户端到客户端通信的设置?一些WLAN路由器将客户端彼此隔离。至于这是多么广泛 - 有相当多的路由器具有这种功能。如果客户端隔离有效,其他服务发现协议将无法直接在两个客户端之间运行。 – ldx 2012-03-21 12:52:03

+0

你好。谢谢你的提示!我必须检查一下。问题出在朋友的路由器上,所以我必须到她的地方去查看它。 – 2012-04-02 08:17:06

回答

3

这可能是一个棘手的问题。导致设备在某些网络上找不到对方的问题与底层传输(即多播UDP)有关,而不是与Bonjour(或mDNS或任何其他你想称之为的设备)相关。

在高级别,非严格而言,多播数据将更多的负载上的路由器。大型企业和大学网络有时得像要滴卓悦消息(即发送到多播组224.0.0.251端口5353 UDP数据包),因为这意味着该网络不与数千客户宣传他们的iTunes资料库或任何淹没,并在这个规模可以提高总体表现。另一方面,由于制造商只知道某些原因,一些家用路由器将组播数据包丢弃。对于这两种情况,你都无法做到。

尝试运行网络上的tcpdump,看看是否包实际上是未来通过。我还没有遇到过一段时间没有转发他们的家庭路由器。如果他们不是,你将不得不提出一些中央[面向互联网,或许?]查找设施。如果它们可见,那么你的实现就有一些问题。

没有什么阻止你写服务发现自己的简单的协议在multicast-它只是有一吨不同语言的卓悦客户的负荷已经编写并测试发送。