2010-10-29 58 views
1

我打算构建一个客户机 - 服务器应用程序。这里的客户端是iPad(或基于安卓的平板电脑)。该服务器是一个普通的电脑。客户端和服务器都连接到相同的网络(使用WiFi)。平板电脑(iPad/Android) - 服务器通信协议

客户端与服务器之间的通信是否有标准方式(协议)?有没有可以用来缓解这种沟通的框架?

谢谢

+0

回复这个很古老的问题。从2015年起,你只需使用“BAAS”(游戏场,解析,类似的东西)。 – Fattie 2016-06-25 17:12:24

回答

6

答案取决于你所定义的“服务器”,“客户端”和“协议”是什么。

技术上,答案是“是”;从实际的角度来看,你正在寻找的框架被称为“套接字”,但是对于协议来说事情可能会变得复杂。

协议是控制数据交换的语法结构,即用于请求/提供服务的一组规则(有关标准列表,请参阅the IETF website)。另一方面,套接字仅为您提供一个通信通道,以将字节从一端传送到另一端,并且在这之上,您需要实现该协议。 好消息是,套接字是独立于语言的,您可以在异构设备(ipad/android/linux/windows)之间发送消息。

在Java中使用的插座很容易(我正在这里很短)

服务器端

ServerSocket ss = new ServerSocket(port); 
Socket s = ss.accept(); 
InputStream is = s.getInputStream(); 

客户端

Socket s = new Socket("server.address", port); // same port as above 
OutputStream os = s.getOutputStream(); 

当你使用os.write写的东西()将读取相同的字节is.read()什么你写上OS是你的协议的执行情况。

Bruce Eckel的“Thinking in Enterprise java”对此主题进行了很好的介绍(对于java语言),您可以免费使用access the digital edition。 在C/C++/Objective C中,事情比较复杂,但您可以轻松地通过Google获得教程。

每个服务定义了自己的协议,你应该决定是否其中一个现有的会做,或者你必须定义自己的,这取决于你想要在两个设备之间要实现哪些服务。

如果在标准方案中,PC扮演着服务器的角色和客户想要从它的信息,你可能要考虑使用HttpURLConnection的安装(非常)轻量级的Web服务器和访问数据。这是一个已经实现了HTTP协议管理的套接字的包装。 请注意,这是针对Java的;对于C/C++没有“标准框架等效”,我真的不知道客观的C

请,也请注意以下事项:

  • 如果客户端和服务器具有不同的体系结构的二进制数据交换可能会痛苦,更好地定义你的协议作为字符串(如SMTP)和编码序列/解码二进制文件使用base64或其他一些你可能想要实现的方法
  • 为了连接两个套接字,客户端必须知道服务器的IP地址;如果您运行的WiFi网络上的DHCP,那么你还需要实现一个发现阶段为您服务

作为最后一个侧面说明:“客户端”和“服务器”标签只是你穿上这取决于通信实体谁在请求服务/信息(客户端)以及谁在提供服务器(服务器)。通信实际上是对称的,您可以在两个端点上使用相同的结构/功能/代码。

+0

非常感谢Dario的回答 – fouad 2010-10-31 12:01:11