平板电脑(iPad/Android) - 服务器通信协议

fou*_*uad 1 android client-server communication protocols ipad

我将构建一个客户端 - 服务器应用程序.这里的客户端是iPad(或基于Android的)平板电脑.服务器是普通的电脑.客户端和服务器都连接到同一网络(使用WiFi).

客户端和服务器之间的通信是否有标准方式(协议)?是否有可用于简化此通信的框架?

谢谢

Dar*_*rio 6

答案取决于您通过"服务器","客户端"和"协议"定义的内容.

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

协议是管理数据交换的语法结构,即用于请求/提供服务的一组规则(请参阅IETF网站 以获取标准列表).另一方面,套接字只为您提供了一个通信通道,可以将字节从一侧传送到另一侧,最重要的是,您需要实现协议.好消息是套接字是独立于语言的,你可以在异构设备(ipad/android/linux/windows)之间发送消息.

在java中使用套接字很容易(我在这里做的很简单)

服务器端

ServerSocket ss = new ServerSocket(port);
Socket s = ss.accept();
InputStream is = s.getInputStream();
Run Code Online (Sandbox Code Playgroud)

客户端

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

当你使用写东西os.write()相同的字节会被读取is.read() . 什么你写上的操作系统是你的协议的执行情况.

通过Bruce Eckel的"Thinking in Enterprise java"可以很好地涵盖(对于java语言)这个主题,您可以免费访问数字版本.在C/C++/Objective C中,事情变得更复杂,但你可以轻松地谷歌搜索教程.

每个服务都定义了自己的协议,您应该根据要在两个设备之间实现的服务来决定现有协议中的一个是否存在,或者您必须定义自己的协议.

如果像标准方法一样,PC扮演服务器的角色,而客户端希望从中检索信息,那么您可能需要考虑安装(非常)轻量级Web服务器并使用HTTPUrlConnection访问数据.这是已实现HTTP协议管理的套接字的包装器.当心,这是针对Java的; 对于C/C++没有"标准框架等价",老实说,我对目标C一无所知.

请注意以下事项:

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

最后一点注意:"客户端"和"服务器"只是您在通信实体上的标签,具体取决于谁在请求服务/信息(客户端)以及谁在提供服务/服务器(服务器).通信实际上是对称的,您可以在两个端点上使用相同的结构/功能/代码.