Android中网络通信技术

来源:互联网 发布:淘宝延迟收货可以几单 编辑:程序博客网 时间:2024/06/06 12:30

     “云计算”核心是将大量的网络资源统一起来,为用户提供高效、便捷的软件服务。在“云计算”这个网络应用模式下,用户可以通过各种“端”访问“云”。“端”可以是任何能够上网的电子设备,“云”就是提供的服务。随着3G网络时代的到来,移动网络速度大大提升,从而使得云与端应用软件需求量越来越大。“云”无论如何飘必须要“落地”,即必须要有移动终端设备和相应的软件支持。云与端应用的技术基础是网络通信技术,就应用层的网络通信技术而言,可以使用Socket、Http和Web Service。

1.Socket通信

       Socket是一种低级、原始的通信方式,要编写服务器端代码和客户端代码,自己开端口,自己制定通信协议、验证数据安全和合法性,而且通常还应该是多线程的。开发起来比较繁琐,但是它也有自身的优点:灵活,不受编程语言、设备、平台和操作系统的限制,通常速度快而且高效。在Java中Socket相关类都在java.net包中,其中主要的类是Socket和ServerSocket。Socket通信方式不是主流。

2.Http协议通信

       Http通信技术是云端应用中最为常见的技术之一。客户端向服务器发出Http请求,服务器接收到客户端的请求后,处理客户端的请求,处理完成后再通过Http应答回去给客户端,这里的客户端一般是指浏览器。但在Android开发中客户端是Android手机端,服务端一般是Http服务器。Http请求方式有get和post两种。

       Http通信编程可以使用Java的java.net.URL,但是这个类只能发出get请求,一般用来请求静态的、少量的服务器端数据。当网络环境不好、反复请求服务器的时候,URI方式有可能无法读取服务器端的数据。除了URI方式外,也可以使用Apache组织提供的HttpClient类库,该类库已经集成到Android平台中。它提供了强有力的HTTP功能,支持HTTPS协议,自动处理Cookie,支持多线程。Get方法请求发送的数据会放置在URL字符串之后;Post方法可以请求动态的、大量的数据,它发送的数据是放置在请求体中的。

       HttpClient实现方式介绍:

       a)HTTP GET方法请求:HttpClient getjsonclient=new DefaultHttpClient()创建一个HTTP客户端对象。HttpGet创建一个基于HTTP协议GET方法的对象,通过这个对象可以向服务器发起GET方法的请求,该对象的创建需要一个URL字符串,HttpGet getjson=new HttpGet(url)。此外HttpGet对象还可以通过addHeader方法设定请求头部信息,发送给服务器。URL字符串转换为URL转编码之后才可以在网络上传输,否则一些特殊的字符会出现异常。通常我们在浏览器地址栏中看到的百分号的字符就是URL编码,在java中可以通过URLEncoder.encode(String str)方式实现URL转编码。HttpResponse response= getjsonclient.execute(getjson)执行请求,此时会真正开始访问服务器端的资源,该方法的执行是耗时的,最好把这里的处理放在一个子线程中。请求执行的结果是返回一个HttpResponse对象,即应答对象。应答对象一旦获得,就可以从这个对象中提出实体对象HttpEntity,可以通过response.getEntity()方法实现,HttpEntity httpent=response.getEntity()。在实体对象中getContent方法可以返回输出流对象,有了输出流就可以做其他的处理了。

       b)HTTP POST方法请求:当需要上传大量的数据、发送密码等敏感数据时,必须以POST的方式发送数据,把数据放到请求体中。POST使用的类是HttpPost类,对象的创建过程与Get方法创建的过程是类似的HttpClient postclient=new DefaultHttpClient();HttpPost  httppost=new HttpPost(url)。BasicNameValuePair是要传输数据的封装类,第一个参数是数据的“键”,第二个参数是数据的值,并且多个BasicNameValuePair对象放到一个集合中,ArrayList<BasicNameValuePair>  nvps=new  ArrayList<BasicNameValuePair>(); nvps.add(newBasicNameValuePair("name","zhangsan"));UrlEncodedFormEntity是请求实体对象,把BasicNameValuePair数据集合设置到这个实体对象中UrlEncodedFormEntity entityIn=new UrlEncodedFormEntity(nvps,"UTF-8");。最后使用httppost.setEntity(entityIn);实体对象设置到请求体中。

3.Web Service

       Web Service(Web 服务)是一种基于XML和HTTPS技术的服务,它也是部署在Web服务器上、由Web服务器管理的。它使得不同计算机语言、不同计算机平台之间的方法调用成为可能,是远程调用和分布式系统的重要实现手段。

       和HTTP通信方式相比较,HTTP不能实现远程方法的调用。比如:在Android客户端编写一个Web Service客户端程序,假设是一个用户登录的程序,将用户名和密码以参数的形式传递给远程的web service,由远程的Web Service处理这个调用,然后将处理结果返回给客户端,Web Service是构建分布式系统的重要手段。但是Android平台目前还没有提供Web Service客户端开发类库,只能借助于第三方的Web Service 客户端开发类库,如果需要的话,可以了解一下KSOAP2。它是一个SOAP web service客户端包,可以到http://ksoap2.sourceforge.net/下载有关的Android开发包。

 

原创粉丝点击