iPhone点对点通信的替代方案,不使用Bonjour协议

5
我正在实现一个iPhone/iPad应用程序,允许用户使用Bonjour协议相互发送消息。基本上,服务器通过Bonjour发布他的服务,连接到同一wifi的客户端可以发现他的服务并连接到它来开始发送消息。我发现的问题是,一些路由器似乎存在Bonjour问题。在家里或其他地方运行我的应用程序时,它完美地工作。Bonjour服务的发布和发现工作得非常顺畅。然而,当我在朋友公寓之一尝试我的应用程序时,一些(不是全部)客户端无法发现已发布的Bonjour服务。我还注意到,其他使用Bonjour的应用程序(例如苹果的远程应用程序)也在该网络上遇到麻烦。经过一番调查,我发现其他人也遇到了类似Bonjour和一些路由器的问题。因此,我有两个问题:
1)是否有人知道一些路由器存在Bonjour问题是否是普遍问题?换句话说,如果我的应用程序完全依赖Bonjour才能工作,我必须担心它在50%的WLAN网络中无法工作,还是大多数路由器不会有任何Bonjour问题。显然,我不能指望任何人知道每个路由器如何处理Bonjour数据包,但也许有一些网络专家可以指点我正确的方向:-p。
2)其次,如果Bonjour协议对于构建我的应用程序来说太冒险了,有哪些具有类似功能的替代方案?我(最好)需要的功能将是服务发布和发现,而无需用户手动输入其他手机的IP地址。
谢谢您的帮助!我知道这是一个比较广泛的问题,但任何帮助都会被赞赏! :)

你能检查一下那个路由器是否有启用客户端之间通信的设置吗?有些 WLAN 路由器会将客户端相互“隔离”。至于这种情况有多普遍——有相当多的路由器都具备这种功能。如果启用了客户端隔离,其他服务发现协议也无法在两个客户端之间直接工作。 - ldx
你好。谢谢您的技巧!我得去看看。这个问题出现在一个朋友的路由器上,所以我得去她那里查看一下。 - Chris Braunschweiler
1个回答

4
这可能是一个很难解决的问题。导致设备在某些网络上无法相互发现的问题与底层传输(即组播UDP)有关,而不是Bonjour(或mDNS或其他你想称呼它的东西)。
简单来说,组播数据会给路由器带来更大的负载。一些大型企业和大学网络有时会放弃Bonjour消息(即发送到组播组224.0.0.251端口5353的UDP数据包),因为这意味着网络不会被成千上万的客户端广告所淹没,而且在规模上可以提高性能。另一方面,一些家用路由器出厂时会出于制造商独有的原因丢弃组播数据包。对于这两种情况,你无能为力。
尝试在网络上运行tcpdump以查看数据包是否实际通过。我已经有一段时间没有遇到过不能转发它们的家用路由器了。如果它们没有传输,你将不得不想出一些中央[面向互联网,也许?]查找工具。如果它们可见,则您的实现存在问题。
没有什么阻止您编写自己的简单协议以进行组播服务发现 - 只是已经编写并测试了许多不同语言的Bonjour客户端。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接