2012-01-10 126 views
18

大家好,我想知道我们必须在两个不同的Android设备之间交换数据有哪些选择?如何从一个Android设备发送数据到另一个?

例如,User-A和User-B都安装我的应用程序。我希望用户A向用户B发送数据(可能只是简单的消息或用户A的位置信息)。

我需要的功能与WhatsApp具有的功能类似。但不像WhatsApp,我没有服务器,我想知道如果我们可以做数据交换两个不同的Android设备之间没有服务器?

我在想我们在SMS或其他东西上建立它。

+0

你可以用什么来发送数据?只有3g?只有wifi?蓝牙?所有这些的混合? – user931366 2012-01-10 01:59:35

+0

我认为使用蓝牙或WiFi连接可以实现这个目标。 – Android 2012-01-10 02:03:07

+1

同意。你不会在3g以外完成这个任务。 – user931366 2012-01-10 02:06:33

回答

10

选项如下:

  • 蓝牙 - 这将是在不久的附近
  • TCP/UDP IP连接两台设备之间 - 这将使用TCP打开套接字直接到另一个服务器插座。这可以托管在手机或共享服务器上。两者都有优点和缺点。

蓝牙的优点是不需要中央服务器。最大的缺点是这意味着你只能在20米范围内的两个人之间交换数据。另一个缺点是你必须配对不是每个人都觉得最简单的设备。

您可以使用TCP/IP连接来交换数据,就像您在传统计算机上编写的任何客户端服务器程序一样。无论您的手机使用3G/4G/WIFI/EDGE还是未来的无线协议,都可以使用此功能。问题是手机的IP地址可能无法全局访问。手机的IP地址可能不像专用IP那样可路由。他们可能在防火墙或NAT地址后面。

这是中央服务器可能需要为用户交换IP地址,或作为可能阻止基础设施的客户端的公共位置。这是SWIFT等协议派上用场来跳转防火墙的地方。即使像P2P这样的东西,你仍然遇到这些类型的问题与不可访问的设备,像这样的技巧必须被用来抓取他们周围。不幸的是,这意味着即使使用P2P模式,您可能也需要一个中央服务器。

+1

这是否意味着,我可以通过TCP/IP从欧洲发送到美国而无需服务器? – 5er 2014-12-12 16:04:40

+0

两台手机之间没有服务器的TCP/IP?不太可能。即使SWIFT,STUN等也至少需要一台服务器来进行发现。您不会连接到服务器以交换数据,但您需要以某种方式发现彼此。如果您知道可路由的IP地址,那么您可以在没有服务器的情况下执行此操作,但这是非常罕见的情况。 – chubbsondubs 2014-12-12 16:51:31

2

如果没有外部服务器来保存所有连接客户端的列表,您需要以P2P方式实现通信。根据您的应用程序的需求,您可以让用户输入他们想要与其交换数据的其他用户的IP地址/电子邮件/电话号码。

如果您希望使用服务器的方式,你可以注册为具有良好Eclipse integration以及插件谷歌的App Engine轻松与Android应用程序接口。这将给你一个基础设施选项,而不需要最初(或者从不取决于你的规模多高)不得不放下任何钱。

Google给出了一个很好的IO talk,显示了一个可以轻松与Android应用程序通信的Web应用程序示例。你可以扩展它来做你正在做的事情。用于设备之间交换信息

+0

是否可以在SMS之上构建它?也就是说,我从用户A发送短信给用户B,不知何故,我的应用程序读取了短信和额外的数据? – Pacerier 2012-01-10 02:42:39

+0

如果通过短信发送,android的所有SMS客户端都会收到通知。可以吗?你不想只有你的应用程序能够控制内容吗? – san 2012-01-10 03:00:39

+0

@Prier:这取决于你发送的是什么数据。这并不是真正实现它的最好方式,但如果您发送短消息(144个字符是一个相当标准的限制,但它随载波而异),它可以工作。 – Robert 2012-01-10 03:01:00

相关问题