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

标签 android ipad client-server protocols communication

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

客户端和服务器之间是否有标准的通信方式(协议(protocol))?是否有任何框架可以用来简化这种沟通?

谢谢

最佳答案

答案取决于您对“服务器”、“客户端”和“协议(protocol)”的定义。

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

协议(protocol)是一种管理数据交换的语法结构,即您用来请求/提供服务的一组规则(请参阅 the IETF website 以获取标准规则列表)。 另一方面,套接字只为您提供一个通信 channel ,用于将字节从一侧传输到另一侧,并且在其之上,您需要实现协议(protocol)。 好消息是套接字与语言无关,您可以在异构设备(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 上编写的是协议(protocol)的实现。

Bruce Eckel 的“Thinking in Enterprise java”很好地涵盖了这个主题(针对 Java 语言),您可以 access the digital edition免费。 在 C/C++/Objective C 中,事情要复杂得多,但您可以轻松地通过谷歌搜索教程。

每项服务都定义了自己的协议(protocol),您应该决定是现有协议(protocol)中的一项可以执行,还是您必须定义自己的协议(protocol),具体取决于您希望在两个设备之间实现的服务。

如果在标准方法中,PC 扮演服务器的角色并且客户端想要从中检索信息,您可能需要考虑安装一个(非常)轻量级的 Web 服务器并使用 HTTPUrlConnection。这是已实现 HTTP 协议(protocol)管理的套接字包装器。 当心,这是针对 Java 的; C/C++ 没有“标准框架等价物”,老实说,我对 objective-c 一无所知。

请注意以下事项:

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

作为最后的旁注:“客户端”和“服务器”只是您根据谁在请求服务/信息(客户端)和谁在提供服务/信息(服务器)而放置在通信实体上的标签。通信实际上是对称的,您可以在两个端点上使用相同的结构/功能/代码。

关于android - 平板电脑(iPad/Android)-服务器通讯协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4050166/

相关文章:

android - 带有imageview的自定义进度条

iphone - 在 iOS 中获取当前温度

iphone - 在 IOS 6 中设置 UITableView 的背景颜色

networking - 在每个客户端上同时启动计时器

C++ 如何在客户端服务器模型中处理这个额外的任务?

Android SDK Nexus S 原生相机问题

android - 如何在 android studio 中了解开发者代码责备

android - 在我的 recyclerview 中获取 ItemViewType

iphone - 使用 JQuery 和 Scrollto 插件自动滚动时 iPad 闪烁

java - 创建自定义异常并从服务器抛出它