我打算构建一个客户端 - 服务器应用程序。这里的客户端是iPad(或基于Android的)平板电脑。服务器是普通的电脑。客户端和服务器都连接到同一网络(使用WiFi)。
客户端和服务器之间的通信是否有标准方式(协议)?有没有可用于简化沟通的框架?
谢谢
答案 0 :(得分:6)
答案取决于您通过“服务器”,“客户端”和“协议”定义的内容。
从技术上讲,答案是“是”;从实际的角度来看,您正在寻找的框架称为“套接字”,但对于协议,事情可能会变得复杂。
协议是一种管理数据交换的语法结构,即用于请求/提供服务的一组规则(有关标准列表,请参阅the IETF website)。 另一方面,套接字只为您提供了一个通信通道,可以将字节从一侧传送到另一侧,最重要的是,您需要实现协议。 好消息是socket与语言无关,你可以在异构设备之间发送消息(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中,事情变得更复杂,但你可以轻松地谷歌进行教程。
每个服务都定义了自己的协议,您应该根据要在两个设备之间实现的服务来决定现有协议之一是否存在,或者您必须定义自己的协议。
如果像标准方法一样,PC扮演服务器的角色,而客户端希望从中检索信息,您可能需要考虑安装(非常)轻量级Web服务器并使用 HTTPUrlConnection访问数据。这是已实现HTTP协议管理的套接字的包装器。 当心,这是针对Java的; C / C ++没有“标准框架等价”,老实说我对目标C不了解。
请注意以下事项:
最后一点注意:“客户端”和“服务器”只是您在通信实体上放置的标签,具体取决于谁在请求服务/信息(客户端)以及谁在提供服务/服务器(服务器)。通信实际上是对称的,您可以在两个端点上使用相同的结构/功能/代码。