Android三种网络通讯机制介绍及区别

一、介绍

1、标准Java接口

java.net.*提供与联网有关的类,包括流、数据包套接字(socket)、Internet协议、常见Http处理等。 
比如:创建URL,以及URLConnection/HttpURLConnection对象、设置链接参数、链接到服务器、向服务器写数据、从服务器读取数据等通信。

HttpURLConnection

HttpURLConnection在java.NET下,继承自URLConnection类,相对于HttpClient具有扩展性高、灵活性高,更轻量级的优点,所以Google在2.3版本之后推荐大家使用HttpURLConnection来操作网络请求。在Http通信中的POST和GET请求方式的不同。

GET方法可以获得静态页面,也可以把参数放在URL字符串后面,传递给服务器。

POST方法的参数是放在Http请求中。

Socket

Socket 作为一种通信机制,处于应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。

在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议,Socket 可以实现单机或者跨网络之间的通信,所以要有明确的Server端和Client端。

Socket 这种通信机制实质就是TCP/IP协议的网络通信,所以也要进行三次握手。 TCP/IP通信的运行机制是首先向对方发出询问,在等到对方的response后,就给对方发数据。而相对应的UDP的通信,是不知道对方通不通,就给对方发送消息,结果就是有可能丢包。

Android三种网络通讯机制介绍及区别_第1张图片

2、Apache接口

对于大部分应用程序而言JDK本身提供的网络功能已远远不够,这时就需要Android提供的Apache HttpClient了。它是一个开源项目,功能更加完善,为客户端的Http编程提供高效、最新、功能丰富的工具包支持。

HttpClient

HttpClient是Apache对java中的HttpURLClient接口的封装,主要引用org.apache.http.**。Google在2.3版本之前推荐使用HttpClient,因为这个封装包安全性高,bug较少。

3、android.net网络接口

使用android.net包下的类进行Android特有的网络编程,如:访问WiFi,访问Android联网信息,邮件等功能。

二、区别

这里主要介绍使用最多的 HttpURLConnection和HttpClient的区别。

1、HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便,比如重访问的自定义,以及一些高级功能等;HttpClient是apache的开源框架,封装了访问http的请求头,参数,内容体,响应等,使用起来比较方便。

2、HttpClient很稳定,功能强,BUG少,容易控制细节;HttpURLConnection前期一直存在着版本兼容的问题,不过在后续的版本中已经相继修复掉了。

3、HttpUrlConnection是Android SDK的标准实现,而HttpClient是apache的开源实现;

4、HttpUrlConnection直接支持GZIP压缩;HttpClient也支持,但要自己写代码处理;

5、HttpUrlConnection直接支持系统级连接池,即打开的连接不会直接关闭,在一段时间内所有程序可共用;HttpClient当然也能做到,但毕竟不如官方直接系统底层支持好;

6、HttpUrlConnection直接在系统层面做了缓存策略处理,加快重复请求的速度。

三、总结

      在安卓开发上,虽然HttpClient更好地支持很多细节的控制(如代理、COOKIE、鉴权、压缩、连接池),但相应地对开发人员要求更高,代码写起来更复杂,普通开发人员很难做到对它很好地驾驭,官方的支持也越来越少;而HttpUrlConnection对大部分工作进行了包装,屏蔽了不需要的细节,更适合开发人员直接调用,而且官方对它的支持和优化也会越来越好。我们既然是做安卓应用的开发,自然要遵循安卓官方的指引,选用HttpUrlConnection。

 

你可能感兴趣的:(Android,Java)