【问题标题】:Android broadcasting over 3gAndroid 广播超过 3g
【发布时间】:2011-12-15 20:00:58
【问题描述】:

我正处于编写需要将数据广播到其他几个设备的应用程序的早期阶段。

我的第一个想法是使用 UDP 广播,但是根据两者 http://code.google.com/p/boxeeremote/wiki/AndroidUDPAndroid 3G UDP Broadcast 在移动网络上,UDP 将无法通过 NAT (这对我的应用至关重要)。

我知道我可以使用服务器进行广播,但是我宁愿避免在我的家庭服务器上产生过多的流量。

我能想到的最后一个选择是有几个 tcp/ip 连接并循环通过所有连接的客户端并发送广播。但由于我指望至少有 30 个听众,我相信这会很昂贵。

我还没有任何与广播相关的代码,这就是我没有发布任何代码的原因;)

有没有办法突破NAT?手机能否同时处理 30 个 tcp/ip 连接?还是我应该研究一下其他的广播方法?

任何提示将不胜感激!

亲切的问候 约翰·里施

:::::::::::::::::::::::::ADDED::::::::::::::::::::: :::::::::::: 我将每 30-360 秒发送一次长度为 10-20 个字符的字符串 (将由用户控制)包含字符串格式的地理点。发送数据的顺序并不重要,这就是我首先想到 udp 的原因。

我已经设置了我的服务器,以便当用户登录时,他/她会使用他/她当前的 ip 更新我的数据库。

我希望它可以在全球范围内使用,但只要它可以在同一个国家/地区的移动网络中使用。

这就是我能想到的所有相关信息,希望这能澄清一些事情! :::::::::::::::::::::::::/添加::::::::::::::::::::::: :::::::::::

【问题讨论】:

  • 如果您能准确解释您将广播的“内容”、频率、其他设备的位置等,将会有所帮助。如果您发布更多详细信息,有人可能会提出替代方案。跨度>

标签: android tcp udp broadcast 3g


【解决方案1】:

NAT 不通过 UDP,因为 UDP 没有目标地址,所以从技术上讲,UDP 必须发送到网络的所有子网。当网络是您的家庭 LAN 时,这没什么大不了的,但当网络是您的 ISP 或大学骨干网或蜂窝提供商时,UDP 可以复制到数十万个子网。这是一个数据包风暴,它会降低每个人的网络性能,而且对于您的特定应用程序来说,这是一个巨大的过度杀伤力,因为您真的只想与少数客户端交谈。

这个问题已经解决了很多次了。 Instant Messaging 客户端的情况与您的情况相似:希望尽可能通过防火墙进行直接 P2P 消息传递。他们是怎么做到的呢?原来的NAT穿越/防火墙穿越方案是搭建一个消息中继服务器。所有客户端都与服务器对话,服务器会根据需要将消息从一个客户端回显给其他客户端。它适用于 NAT 和防火墙,因为客户端发起到服务器的传出连接。

如果客户端能够建立点对点连接,那么中继服务器可以只给客户端彼此的IP地址并停止中继消息。

UPNP 是一种协议,它使客户端能够请求防火墙为传入流量打开端口。 BitTorrent 客户端使用 UPNP 使客户端能够连接 P2P 进行文件共享。客户端通过洪流服务器找到彼此。现在大多数家庭 LAN 防火墙路由器都支持 UPNP,但我怀疑蜂窝网络提供商是否会为无线连接提供 UPNP 支持。

另一种(远程)可能性是多播 TCP/IP,但我记得这确实针对从服务器流向客户端的“推送”内容而不是客户端发起的点对点进行了优化。

最好的办法是看看那里的开源 IM 客户端,尤其是那些使用 Android 实现的客户端,看看他们是如何进行 IM 的。 Jabber 是我想到的一个,我相信还有其他的。您甚至可以使用 IM 系统的消息传递 API 作为您的数据传输层,并且或多或少地完全避开线路级别的细节。

【讨论】:

  • 会调查的!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 2011-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多