Android与服务器的通信方式主要有两种,一种是Http通信,另一种是Socket通信。
HTTP通信:Android中内置HttpClient,这样可以发方便的发送Http请求并获取Http响应,简化了与网站之间的交互。
Socket通信:Android还支持JDK本身的TCP、UDP网络通信的API,可以使用Java中提供的ServerSocket、Socket类,来建立基于TCP/IP协议的网络通信,也可以使用DatagramSocket、Datagrampacket、MulticastSocket来建立基于UDP协议的网络通信。

两者的区别:两者的最大差异在于,Http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据。而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求。

一、HTTP连接

HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。

Android目前提供两种http通信方式,HttpURLConnection和HttpClient,HttpURLConnection多用于发送或接收流式数据,因此比较适合上传/下载文件,HttpClient相对来讲更大更全能,但是速度相对也要慢一点。


一次完整的HTTP请求流程

二、SOCKET连接

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。
套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
服务器监听:服务器端处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
客户端请求:客户端的必须首先指出服务器端的地址和端口号,然后就向服务器端提出连接请求。
连接确认:当服务器端监听到或者接收到客户端的连接请求时,就响应客户端的请求,建立一个新的线程,把服务器端的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端继续处于监听状态,继续接收其他客户端的连接请求。


三、SOCKET连接与HTTP连接

由于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。
而HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。
有个比较形象的描述:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

四、SOCKET连接与TCP/IP连接

网络有一段关于socket和TCP/IP协议关系的说法比较容易理解:
“TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。
实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。

参考资料:
Android使用http协议与服务器通信
Android之基于HTTP协议的通信详解
Socket 网络通信协议 http、TCP/IP协议与socket之间的区别

更多相关文章

  1. Android使用Retrofit进行网络请求
  2. haproxy根据客户端浏览器进行跳转
  3. Android的网络状态判断
  4. Android(安卓)Paging组件Demo
  5. 【安卓笔记】android客户端与服务端交互的三种方式
  6. android手机客户端上传文件,java servlet服务器端接收并保存到服
  7. Android打开/关闭数据流量
  8. 重定向android log
  9. 【android测试】值得学习的android测试知识连接

随机推荐

  1. 如何将JSON传回PHP的AJAX请求?
  2. PHP限制HTML内容中图片必须是本站的方法
  3. php网站 手机归属地查询接口
  4. PHP日期添加1年到当前日期。
  5. PHP将邮件发送到多个电子邮件地址
  6. 在Codeigniter中将javascript变量从视图
  7. php 把驼峰样式的字符串转换成下划线样式
  8. PHP邮件脚本占用了大量资源
  9. Mac升级到EI capitan重新设置Apache和php
  10. 我可以在运行PHP的64位系统上将PHP_INT_S