我正处于编写需要将数据广播到其他几个设备的应用程序的早期阶段。
我的第一个想法是使用UDP广播,但根据两者 http://code.google.com/p/boxeeremote/wiki/AndroidUDP和 Android 3G UDP Broadcast 在移动网络上,UDP将无法通过NAT (这对我的应用程序至关重要。)
我知道我可以使用服务器进行广播,但我宁愿避免在我的家庭服务器上产生大量流量。
我能想到的最后一个替代方案是拥有多个tcp / ip连接并循环遍历所有连接的客户端并发送广播。但由于我指望至少有30名听众,我相信这将是昂贵的。
我还没有任何广播相关代码,这就是我没有发布任何广告的原因;)
有没有办法突破NAT?手机能否同时处理30个tcp / ip连接?或者我应该研究一些其他广播方法?
任何提示都将不胜感激!
亲切的问候 约翰里施
::::::::::::::::::::::::: ADDED ::::::::::::::::::::: ::::::::::: 我将每30-360秒发送一次长度为10-20个字符的字符串 (将由用户控制)包含字符串格式的地理点。数据发送的顺序并不重要,这就是我首先想到udp的原因。
我已经设置了我的服务器,以便当用户登录时他/她用他/她当前的ip更新我的数据库。
我希望它能在全球范围内运作,但只要它可以在同一个国家/地区的移动网络中运行。
这是关于我能想到的所有相关信息,希望这可以解决一些问题! :::::::::::::::::::::::::/添加::::::::::::::::::::::: ::::::::::
答案 0 :(得分:4)
NAT不通过UDP,因为UDP没有目标地址,因此技术上必须将UDP发送到网络的所有子网。当网络是您的家庭局域网时,这没什么大不了的,但当网络是您的ISP或大学骨干网或蜂窝提供商时,UDP可以复制到数十万个子网。这是一个数据包风暴,会降低每个人的网络性能,而且对于你的特定应用程序来说这是一个大大的过度杀伤,因为你真的只想与少数客户交谈。
这个问题已经解决了很多次。 Instant Messaging客户端与您的情况类似:希望在可能的情况下通过防火墙进行直接P2P消息传递。他们是如何做到的呢?原始NAT遍历/防火墙遍历解决方案是设置消息中继服务器。所有客户端都与服务器通信,服务器根据需要从一个客户端回送消息。它适用于NAT和防火墙,因为客户端启动到服务器的传出连接。
如果客户端能够建立对等连接,则中继服务器可以只为客户端提供彼此的IP地址,并停止中继消息。
UPNP是一种协议,允许客户端请求防火墙为传入流量打开端口。 BitTorrent客户端使用UPNP使客户端能够连接P2P以进行文件共享。客户端通过torrent服务器找到对方。大多数家庭局域网防火墙路由器现在都支持UPNP,但我似乎对蜂窝网络提供商提供UPNP无线连接支持感到怀疑。
另一种(远程)可能性是多播TCP / IP,但我记得这实际上是针对从服务器流向客户端而不是客户端发起的点对点的“推送”内容进行了优化。
你最好的选择是看看那里的开源IM客户端,特别是那些有Android实现的客户端,看看他们是如何做IM的。 Jabber是我想到的,我相信还有其他人。您甚至可以使用IM系统的消息传递API作为数据传输层,并且或多或少完全不受线路级别细节的限制。