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

平板电脑(iPad/Android)-服务器通信协议,android,ipad,client-server,protocols,communication,Android,Ipad,Client Server,Protocols,Communication,我将构建一个客户机-服务器应用程序。这里的客户端是iPad或基于android的平板电脑。服务器是一台普通pc。客户端和服务器都使用WiFi连接到同一网络 客户端和服务器之间是否有标准的通信方式协议?是否有任何框架可以用来简化这种沟通 谢谢答案取决于您对服务器、客户端和协议的定义 从技术上讲,答案是肯定的;从实用的角度来看,您正在寻找的框架称为socket,但是关于协议,事情可能会变得复杂 协议是管理数据交换的语法结构,即用于请求/提供服务的一组规则。有关标准规则的列表,请参阅。 另一方面,套接

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

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


谢谢

答案取决于您对服务器、客户端和协议的定义

从技术上讲,答案是肯定的;从实用的角度来看,您正在寻找的框架称为socket,但是关于协议,事情可能会变得复杂

协议是管理数据交换的语法结构,即用于请求/提供服务的一组规则。有关标准规则的列表,请参阅。 另一方面,套接字只为您提供了一个通信通道,用于将字节从一端传送到另一端,并且需要在其上实现协议。 好消息是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将读取相同的字节。 你在操作系统上写的是你的协议的实现

布鲁斯·埃克尔(Bruce Eckel)的《在企业java中思考》(Thinking in Enterprise java)很好地涵盖了java语言这一主题,您可以免费阅读。 在C/C++/Objective C中,事情更加复杂,但您可以轻松地在谷歌上搜索教程

每个服务都定义了自己的协议,您应该根据要在两个设备之间实现的服务来决定是使用现有的协议还是必须定义自己的协议

如在标准方法中,PC扮演服务器的角色,客户端希望从中检索信息,您可能需要考虑安装一个非常轻量级的Web服务器并使用HTTPURLCONTION访问数据。这是已实现HTTP协议管理的套接字的包装器。 注意,这是为Java设计的;没有与C/C++等效的标准框架,老实说,我对objective C一无所知

请注意以下事项:

如果客户机和服务器具有不同的体系结构,二进制数据交换可能会很困难,那么最好将协议定义为一系列字符串,如SMTP,并使用base64或您可能希望实现的其他方法对二进制文件进行编码/解码 为了连接两个套接字,客户端必须知道服务器的IP地址;如果您在WIFi网络上运行DHCP,则还需要为您的服务实施发现阶段
最后,请注意:客户机和服务器只是您在通信实体上贴上的标签,具体取决于谁在请求服务/信息客户机以及谁在提供it服务器。通信实际上是对称的,您可以在两个端点上使用相同的结构/函数/代码

答案取决于您对服务器、客户端和协议的定义

从技术上讲,答案是肯定的;从实用的角度来看,您正在寻找的框架称为socket,但是关于协议,事情可能会变得复杂

协议是管理数据交换的语法结构,即用于请求/提供服务的一组规则。有关标准规则的列表,请参阅。 另一方面,套接字只为您提供了一个通信通道,用于将字节从一端传送到另一端,并且需要在其上实现协议。 好消息是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将读取相同的字节。 你在操作系统上写的是你的协议的实现

布鲁斯·埃克尔(Bruce Eckel)的《在企业java中思考》(Thinking in Enterprise java)很好地涵盖了java语言这一主题,您可以免费阅读。 在C/C++/Objective C中,事情更加复杂,但您可以轻松地在谷歌上搜索教程

每个服务都定义了自己的协议,您应该根据要在两个设备之间实现的服务来决定是使用现有的协议还是必须定义自己的协议

如在标准方法中,PC扮演服务器的角色,客户端希望从中检索信息,您可能需要考虑安装一个非常轻量级的Web服务器并使用HTTPURLCONTION访问数据。这是已实现HTTP协议管理的套接字的包装器。 注意,这是为Java设计的;没有与C/C++等效的标准框架,老实说,我对objective C一无所知

请注意以下事项:

如果客户端和服务器具有不同的体系结构,则二进制数据交换 e可能会很痛苦,最好将您的协议定义为一系列字符串,如SMTP,并使用base64或其他您可能想要实现的方法对二进制文件进行编码/解码 为了连接两个套接字,客户端必须知道服务器的IP地址;如果您在WIFi网络上运行DHCP,则还需要为您的服务实施发现阶段
最后,请注意:客户机和服务器只是您在通信实体上贴上的标签,具体取决于谁在请求服务/信息客户机以及谁在提供it服务器。通信实际上是对称的,您可以在两个端点上使用相同的结构/函数/代码

谢谢达里奥的回答谢谢达里奥的回答这个老问题。从2015年起,您只需使用BAAS gamesparks、parse之类的工具。这是一个非常古老的问题。从2015年起,您只需使用BAAS gamesparks、parse之类的工具。