2013-11-24 110 views
1

在我的应用程序中,我需要将几个(客户端)设备连接到一个(服务器)设备。我需要它在局域网中工作,所以没有远程服务器。 的要求是:在局域网中发送数据和命令从设备到设备

必须具备:

  • 能力为客户找到一个发现服务器(没有手动IP输入)
  • 能力的服务器知道哪些客户端连接
  • 将大量数据(图片等)从服务器发送到客户端的能力
  • 从服务器向客户端发送命令(以字符串或json形式)和反之亦然的能力

应具备:

  • 到大集从客户端的数据(图片等)发送到服务器
  • 将所有数据加密能力的能力,并用短密码

命令我googlefu在这个搜索中没有帮助我,我缺乏很好的搜索条件。 我在问的不是一些代码,我要求提供一些关于使用哪种技术的建议,以及在Android中是否可行。一些好的文章或教程是非常受欢迎的。

+1

Android提供了基本的非特权unix样式套接字网络,因此这适用于Android客户端和任何服务器操作系统。实际上,您需要使用WiFi网络(这可能会对电池造成一定的影响),就好像您要使用客户端的移动网络连接一样,您需要在外部Internet上使您的服务器可见。假设wifi可以通过在由DHCP指定的计算机上运行服务器作为网关(即使拒绝将流量路由到外部)或通过运行本地DNS来简化发现过程。但是有Android的发现协议实现。 –

回答

2

我会建议使用客户端服务器套接字实现。您可以执行an IP broadcast并让您的服务器响应特定的客户端。一旦做出初步回应,您可以按照喜欢的方式传输数据。

它基本上可以归结为:

  • 客户端创建连接到广播IP预设的端口上的套接字,并监听传入连接
  • 服务器在该端口上侦听和响应任何传入连接
  • 客户端收到服务器的响应并回复有关其客户身份的详细信息
  • 任何其他数据通过现在建立的套接字连接发送

请记住,通过使用套接字,您正在使用裸IP数据报,并仅使用原始二进制数据提供其主体。这意味着您将不得不手动编写协议以应对请求和响应类型,丢弃的数据包和IP的任何其他限制。你可能想要寻找TCP实现层或者为了你的目的更复杂的东西。

+0

这可能会采用UDP流量而不是原始IP数据包的形式,尤其是当后者可能存在许可问题时。 –

+0

是的,我纠正了。 Java [套接字](http://developer.android.com/reference/java/net/Socket.html)使用TCP,而[DatagramSockets](http://developer.android.com/reference/java/net/DatagramSocket .html)是UDP。 –

+0

非常重要的是,正如Chris指出的那样,这只会在Wi-Fi连接上起作用! –

相关问题