您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 08-Android网络通信
GoogleAndroidAndroid网络通信basedonandroid2011.9本章内容Android平台网络通信AndroidHttp通信AndroidSocket通信蓝牙WIFIAndroid网络通信AndroidSDK中一些与网络有关的包如下所示:包描述java.net提供与网络通信相关的类,包括流和数据包socket、Internet协议和常见HTTP处理。该包是一个多功能网络资源。有经验的Java开发人员可以立即使用这个熟悉的包创建应用程序。java.io虽然没有提供现实网络通信功能,但是仍然非常重要。该包中的类由其他Java包中提供的socket和链接使用。它们还用于与本地文件的交互。java.nio包含表示特定数据类型的缓冲区的类。适用于两个基于java语言的端点之间的通信。org.apache.*表示许多为HTTP通信提供精确控制和功能的包。可以将Apache视为流行的开源Web服务器。android.net除核心java.net.*类以外,包含额外的网络访问socket。该包包括URI类,后者频繁用于Android应用程序开发,而不仅仅是传统的联网。android.net.http包含处理SSL证书的类。Android平台网络通信Android与服务器通信的方式一般有两种:−http通信方式:httpURLConnetction接口(Java.net)httpClient接口(org.apache)http通信也分为post方式和get方式。−socket通信方式HTTP连接HTTP(HypertextTransferProtocol),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种协议。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。–在HTTP1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。–在HTTP1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求HTTP连接由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”、“无状态”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的做法是即使不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。AndroidHTTP通信—Http的工作方式基于HTTP1.0协议的客户端在每次向服务器发出请求后,服务器就会向客户端返回响应消息,在确认客户端已经收到响应消息后,服务端就会关闭网络连接。在这个数据传输过程中,并不保存任何历史信息和状态信息,因此,HTTP协议也被认为是无状态的协议AndroidHTTP通信—Http的工作方式HTTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持。当客户端使用HTTP1.1协议连接到服务器后,服务器就将关闭客户端连接的主动权交还给客户端;也就是说,只要不调用Socket类的close方法关闭网络连接,就可以继续向服务器发送HTTP请求。HTTP连接HTTP连接使用的是“请求—响应”的方式(2次握手),不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。而Socket连接在双方建立起连接后就可以直接进行数据的传输AndroidHTTP通信—什么是Http协议HTTP协议是一种应用层协议,HTTP是HyperTextTransferProtocol(超文本传输协议)的英文缩写。最新稳定版本HTTP1.1HTTP可以通过传输层的TCP协议在客户端和服务器之间传输数据。HTTP协议主要用于Web浏览器和Web服务器之间的数据交换。,开头的4个字母http就相当于通知浏览器使用HTTP协议来和host所确定的服务器进行通讯。详情请查看RFC2616或。AndroidHTTP通信—Http1.1HTTP1.1除了支持持久连接外,还将HTTP1.0的请求方法从原来的三个(GET、POST和HEAD)扩展到了八个(OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE和CONNECT)。从而应用可以获取连接的更多信息,使得应用更加人性化。除了这些,还提供了身份认证、状态管理和缓存(Cache)等相关的请求头和响应头。AndroidHTTP通信—Http协议的特点支持B/S及C/S模式;简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记;无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。AndroidHTTP通信—Http协议详解[:port][abs_path]–http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用缺省端口80;abs_path指定请求资源的URI,例如输入:,浏览器自动转换成:http请求由三部分组成:请求行、消息报头、请求正文,一起发给服务器端。AndroidHTTP通信—Http协议请求方法请求行中包括了请求方法,解释如下:―GET请求获取Request-URI所标识的资源;―POST在Request-URI所标识的资源后附加新的数据;―HEAD请求获取由Request-URI所标识的资源的响应消息报头―PUT请求服务器存储一个资源,并用Request-URI作为其标识―DELETE请求服务器删除Request-URI所标识的资源;―TRACE请求服务器回送收到的请求信息,主要用于测试或诊断―CONNECT保留将来使用―OPTIONS请求查询服务器的性能,或者查询与资源相关的选项和需求AndroidHTTP通信—Http协议请求方法应用举例:–GET方法GET/sample.jspHTTP/1.1Accept:image/gif.image/jpeg,*/*Accept-Language:zh-cnConnection:Keep-AliveHost:localhostUser-Agent:Mozila/4.0(compatible;MSIE5.01;WindowNT5.0)Accept-Encoding:gzip,deflateusername=jinqiao&password=1234AndroidHTTP通信—Http响应HTTP响应也是由三个部分组成:状态行、消息报头、响应正文,一并发给客户端,状态行中包括状态码:–1xx:指示信息--表示请求已接收,继续处理–2xx:成功--表示请求已被成功接收、理解、接受–3xx:重定向--要完成请求必须进行更进一步的操作–4xx:客户端错误--请求有语法错误或请求无法实现–5xx:服务器端错误--服务器未能实现合法的请求AndroidHTTP通信—Http常见状态码描述常见状态代码、状态描述、说明:―200OK//客户端请求成功―400BadRequest//客户端请求有语法错误,不能被服务器所理解―401Unauthorized//请求未经授权,这个状态代码必须和报//头域一起使用―403Forbidden//服务器收到请求,但是拒绝提供服务―404NotFound//请求资源不存在,eg:输入了错误的URL―500InternalServerError//服务器发生不可预期的错误―503ServerUnavailable//服务器当前不能处理客户端的请求,一段时间后,//可能恢复正常eg:HTTP/1.1200OK(CRLF)AndroidHTTP通信—Http响应应用举例:–GET响应HTTP/1.1200OKServer:ApacheTomcat/5.0.12Date:Mon,6Oct200313:23:42GMTContent-Length:112htmlheadtitleHTTP响应示例title/headbodyHelloHTTP!/body/htmlAndroidHTTP通信—Get与PostGet和POST请求主要有几种区别:–Post请求可以向服务器传送数据,而且数据放在HTMLHEADER内一起传送到服务端URL地址,数据对用户不可见。而get是把参数数据队列加到提交的URL中,值和表单内各个字段一一对应,例如(=%C4&inputT=2710)–get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。–get安全性非常低,post安全性较高。HttpClient—通过Get方式获取请求数据Android的Get方式首先要初始化–HttpClientclient=newDefaultHttpClient();–HttpGetrequest=newHttpGet();在初始化url地址可以预先定义一个字符串,在初始化HttpClient时作为构造函数的参数输入;亦可在创建好HttpGet的实例后,采用request.setURL()的方式设置地址。Get方式出了可以访问无参数的地址外也可带参数访问。HttpClient—通过Post方式获取请求数据post方式比get方式要复杂。首先要通过HttpPost来构建一个post请求。方式如下:另外需要使用NameValuePair来保存客户端传递的参数,可以使用BasicNameValuePair来构造一个要被传递的参数,通过add方法把这些参数加入到NameValuePair中,代码为:其他的方式post方式与get方式没有多大差别,可以通过HttpClient来请求连接,返回并响应处理。ListNameValuePairparams=newArrayListNameValuePair();params.add(newBasicNameValuePair(valuename,value));HttpPosthttppost=newHttpPost(url);HttpClientDemo实例运行结果展示uses-permissionandroid:name=android.permission.INTERNET/允许用户访问网络。运行时的初始状态Get方式Post方式AndroidURL通信Java网络编程熟悉的人,肯定不会对HttpURLConnection陌生,HttpURLConnection属于JavaAPI的标准接口,包含在包java.net中。而Android平台支持java.net的在Android中除了使用WebView控件访问网络以外,还有用代码方式访问网络的方法,代码方式有时候会显得更加灵活。本节介绍使用URLConnection对象和HttpClient组件访问网络的方法。AndroidURL通信AndroidHTTPURL接口的基本操作主要包括:–创建URL以及HttpURLConnection对象。–连接参数设置。–连接到服
本文标题:08-Android网络通信
链接地址:https://www.777doc.com/doc-4765424 .html