Android手机开发 - UDP服务

4
我对实现与UDP服务交互的Android应用程序的可行性很感兴趣。我确定Android支持UDP:http://www.helloandroid.com/tutorials/simple-udp-communication-example
但我不太清楚这样的应用程序在普通计费的Android手机上是否能正常工作,特别是在双向通讯方面。我希望Android客户端通过UDP协议(自我宣告)联系远程托管服务,并且服务器随后会通知Android设备有关实时事件的情况。
我担心商业网络上的移动设备可能会被强制更改IP地址,例如当进入或退出Wi-Fi区域时,而且我不确定在典型的3G网络上是否存在NAT问题。
在一个Android手机上使用UDP进行双向(尽力而为)通信真的可行吗?

1
移动网络通常会阻止UDP数据,因为通常VoIP使用它,而网络运营商不喜欢通过VoIP失去利润。 - Robert
1
你能更具体地说明“经常”是指多久一次吗? - aSteve
1
这很难说,因为它取决于您的移动网络运营商和您所居住的国家。只需检查您设备上获取的IP地址即可。如果它是私有IP地址(10.x.x.x、192.168.x.x或类似),则表示您在NAT网关后面,通常会阻止所有传入的UDP流量。 - Robert
1个回答

5

这里有几个问题需要你注意。首先,UDP在Android上完全可用。它可以很好地发送和接收UDP数据包。更大的问题实际上是,除非手机处于WiFi并且连接来自同一局域网,否则无法接收未开启初始连接的传入UDP连接。

在3G/4G上,由于无线运营商已经安装了防火墙和代理服务器,因此电话从外部是不可寻址的。因此,传入连接不会通过该防火墙。如果相反地,手机从防火墙后面打开连接,则双向流量可以通过该链接流动。

现在,你将遇到的问题是

1)当手机从网络(3G)到网络(Wifi)时保持链接活动

2)由于不断开放的连接而导致的电池寿命

最有可能的情况是,你真正想要的是C2DM。


我之前不知道C2DM的存在...它的存在强烈暗示了我原本打算使用UDP的方式是不可行的。我宁愿使用UDP而不是像C2DM这样复杂的东西 - 并避免依赖于Google的服务...但是,嘿-哦。 - aSteve
1
C2DM在2012年6月已被弃用,但是现在提供了替代品GCM - Jason C

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