点对点通信选项

时间:2011-02-18 12:44:38

标签: android json communication p2p

任何人都可以确认Android框架内目前允许的点对点通信方法是什么?我需要传输json字符串,我现在正在使用短信工作正常,但问题是数据也最终成为大量的短信。我读过Reto Meier的第一版专业Android应用程序开发,他说由于安全问题,数据传输选项没有实现。

这是否发生了变化?您将如何进行点对点数据传输?

5 个答案:

答案 0 :(得分:20)

你看过Qualcomm's AllJoyn library了吗?它可以通过蓝牙或无线网络工作,因此可能适用,但如果您通过3G或更广泛的网络连接它将无法正常工作。

考虑到不在同一网络上的两个远程设备之间网络的变化和可靠性,我会质疑点对点是否是最佳解决方案,并冒险建议考虑在两者之间使用应用服务器,所以你然后可以使用Cloud to Device Messaging [已弃用](可能与Google App Engine一起使用)。即发送邮件,发件人将邮件传递给服务器,然后服务器将邮件传递给收件人。

理论上,网络上的所有设备都具有唯一的IP地址并且可以相互通信,但由于路由器/防火墙的配置不同,所以很少这么简单,因此您需要非常注意所使用的端口,尤其是考虑到出于安全原因,默认情况下会阻止许多入站端口。

答案 1 :(得分:4)

您可以简单地使用UDP / TCP套接字。在一个单独的线程中,您设置了服务器端侦听器套接字,就是这样。当然,您的应用程序必须首先启动(或者应该始终在后台运行)。这是一个例子:

http://thinkandroid.wordpress.com/2010/03/27/incorporating-socket-programming-into-your-applications/

如果您还需要同行发现,这会使事情变得更加困难。

答案 2 :(得分:3)

您还应该查看peerdroid,一个可用的开源项目here。从拥有联合设备集合的角度来看,我一直在寻找对等通信选项(预配对,如果你喜欢,类似于蓝牙配对);这个库看起来似乎可以为你想要做的事奠定基础。

如果您在自己的网络上(例如家庭或办公室WiFi),那么您应该能够查询其他连接的设备。如果您所在的网络不在您的控制之下(移动网络或公共wifi),则网络将被配置为将每个设备与其他所有设备隔离。在这种情况下,你将别无选择,只能将服务器作为中间人。这带来了自己的架构妥协 - 每个设备都必须定期轮询服务器或保持连接打开 - 除非您使用Google App Engine支持通过Google自己的基础架构进行推送通知。

答案 3 :(得分:1)

感谢您的回答ldx,但我需要您指出的同行发现。一些进一步的研究似乎表明XMPP是一种合适的技术,现在提供了一些服务,尽管这些似乎是针对“服务器”到客户端通知。在XMPP和一些here上有一个很好的讨论more here,尽管看起来仍然存在一些问题需要处理,例如轮询v push,长时间运行的打开http连接和电池寿命。 Xtify看起来很有前途,尤其是他们的网络服务。我希望这能为其他人提供适当的信息,以查看点对点数据通信的主题。

答案 4 :(得分:0)

试试PushSharp。用于向iOS(iPhone / iPad APNS),Android(C2DM和GCM - Google Cloud Message),Windows Phone和Windows 8设备发送推送通知的服务器端库。