读书笔记:Android网络通信

来源:互联网 发布:源码天下 编辑:程序博客网 时间:2024/05/23 09:34
Android平台有三种网络接口可以使用,他们分别是:java.net.*(标准Java接口)、Org.apache接口和Android.net.*(Android网络接口)。
1.标准Java接口
java.net.*提供与联网有关的类,包括流、数据包套接字(socket)、Internet协议、常见Http处理等。比如:创建URL,以及URLConnection/HttpURLConnection对象、设置链接参数、链接到服务器、向服务器写数据、从服务器读取数据等通信
2。Apache接口
对于大部分应用程序而言JDK本身提供的网络功能已远远不够,这时就需要Android提供的Apache HttpClient了。它是一个开源项目,功能更加完善,为客户端的Http编程提供高效、最新、功能丰富的工具包支持。
3.android.net编程:
常常使用此包下的类进行Android特有的网络编程,如:访问WiFi,访问Android联网信息,邮件等功能。
上文取自Android的三种网络通信方式

Android平台不允许直接在UI线程中建立网络连接,访问网络资源。
Android完全支持JDK本身的TCP,UDP网络通信API:
      第一种:使用ServerSocket,Socket来建立基于TCP/IP协议的网络通信
      第二种:使用DatagramSocket,Datagrampacket,MulticastSocket来建立基于UDP协议的网络通信
Android也支持JDK提供的URL,URLConnection等网络通信API:
      第三种:使用URL访问网络资源,使用URLConnection提交请求
      第四种:使用HttpURLConnection访问网络
Android成功集成了HttpClicent,它是一个简单的HTTP客户端
      第五种:使用HttpClicent访问网络资源
Android提供了WebView组件,并且在Android5.0得到增强,他本是是一个浏览器实现
      第六种:使用WebView
Google为Android平台开发Web Service客户端提供了ksoap2-android项目
      第七种:使用Web Service进行网络编程
一:基于TCP/IP协议的网络通信
TCP/IP通信协议是一种可靠的网络协议,他在通信两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路,两端的程序可以通过虚拟链路进行通信了。java使用Socket对象来代表两段的通信接口,并通过Socket产生IO流进行网络通信。
TCP协议保证了数据包在传送中准确无误,TCP协议使用重发机制:当一个通信实体发送一个消息给另一个通信实体后,需要收到另一个通信实体的确认信息,如果没有收到另个通信实体的确认信息,则会再次重发刚才的消息。
1,使用ServerSocket创建TCP服务器端
Java中接受其他通信实体连接请求的类是ServerSocket类,ServerSorket对象用于监听来自客户端的Socket连接,如果没有连接,它一直处于监听状态。所以程序通常会通过循环不断的调用ServiceSorcket的sccept()方法。
2,使用Socket进行通信
客户端通常使用Socket的构造器来连接指定服务器,程序通常使用String对象(如:192.168.0.0)来指定远程IP地址。
3,当客户端,服务器端产生了对应的Socket之后,程序就无需再区分服务器,客户端了,而是通过各自的Socket进行通信。Socket提供如下两个方法获取输入流和输出流:InputStream getInputStream();OutputStream getOutputStream().
二:使用URL访问网络资源
1,URL对象代表同一资源定位器,它是指向互联网资源的指针。URL可以由协议名,主机,端口,资源组成,即满足这样格式: protocol://host:port/resourceName
2,URL的openConnection()方法将返回一个URLConnection对象,程序可以通过URLConnetion实例向URL发送请求,读取URL的引用资源:
       1,通过调用URL对象的openConnection()方法创建URLConnection对象
       2,设置URLConnection的参数和普通请求属性
       3,如果只是发送GET方式请求,使用connect方法建立和远程资源的实际连接即可;如果发送POST方式请求,则需要获取URLConnnection实例对应的输出流来发送请求参数
       4,远程资源变为可用,程序可以访问远程资源的头字段,或通过输入流读取远程资源的数据。
三:使用HTTP访问网络
1,HttpURLConnection,是URLConnection的子类,在其基础上增加了一些用于操作HTTP资源的便捷方法。
2,使用Apache HttpClient,比HttpURLConnection更容易实现访问具有相应权限才能访问的Web站点页面。只需要如下几步:
      1,创建HttpClient对象
      2,如果需要发送GET请求,则创建HttpGet对象;如果需要发送POST请求,则需要创建HttpPost对象
      3,如果需要发送请求参数,则可调用HttpGet,HttpPost共同的setParams(HttpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置参数
      4,调用HttpClient对象的execute(HttpUriRequest request)方法发送请求,执行该方法返回一个HttpResponse
      5,调用那个HttpReponse的getAllHeaders()方法(),getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的相应内容。
程序只要第一次通过了HttpClient登录系统,接下来即可通过该HttpClient访问被保护资源了。
3,Android 6.0版本不再支持Apache HTTPClient。 如果你的应用程序使用 HTTPClient或者 targets Android 2.3(API级别9)或更高,使用HttpURLConnection类 代替。 这个API更有效的,因为它可以减少网络使用,通过透明的压缩 和响应缓存,减少能耗。 继续使用Apache HTTP api,你 你必须首先声明以下编译时依赖build.gradle文件:
android {
useLibrary 'org.apache.http.legacy'
}
四:Android5.0增强的WebView
1,WebView的用法基本和ImageView类似,它提供了大量方法执行浏览器操作。Android5.0增强的WepView基于Chromium M37,直接支持WebRTC,WebAudio,WebGL。开发者可以直接在WebView中使用聚合(Polymer)和材料设计。
2,WebView提供了一个方法loadData()方法,可用于加载并显示HTML代码:当加载中文会显示乱码,loadDataWithBaseURL(代码,代码的mime类型,HTML代码编码所用的字符集如GBK)是他增强版,不会产生乱码。
3,WebView提供了一个WebSettings工具类,该工具类提供了大量的方法来管理WebView的选项设置。让WebView中的JavaScript脚本都够调用Android方法,只需简单几步实现:
      1,调用WebView关联的WebView的setJavaScriptEnabled(true)启用JavaScript调用功能
      2,调用WebView的addJavasscriptInterface(Object object,String name)方法将object对象暴露给JavaScript脚本
      3,在JavaScript脚本中通过刚才暴露的name对象调用Android方法
4,默认情况下,打开WebView中的连接,是启动安卓的默认浏览器打开加载目标URL,通过setWebViewClient()创建WebViewClient实例让链接在WebView内打开
五:使用Web Service进行网络编程
1,android应用与远程服务器进行交互,WebService是一种不错的选择。Google为Android平台开发Web Service客户端提供了ksoap2-android项目,但这个项目并未直接集成到Android项目中,需要自己下载JAR包,添加到项目中去。
2,使用ksoap2-android调用Web Service操作的步骤:
      1,创建HttpTransportSE对象,该对象用于调用WebSerivice操作
      2,创建SoapSerializationEnvelope对象
      3,创建SoapObject对象,传入索要调用Web Service的命名空间,Web Service方法名
      4,如果有参数需要传入给Web Serivice 服务器端,调用SoapObject对象的addProperty()方法来设置参数
      5,调用SoapSerializationEnvelope的setOutputObject()方法
      6,调用对象的call()方法,并以SoapSerializationEnvelope作为参数调用远程Web Serivice
      7,调用完成后,访问SoapSerializationEnvelope对象的bodyln属性,该属性返回一个SoapObject对象,该对象就代表了WebService的返回消息。解析该对象,即可获得调用WebService的返回值。
不管Web Service功能多复杂,对安卓客户端而言,他只是通过WebService获取对方提供的数据,并将这些数据整合到自己的应用中即可。
0 0
原创粉丝点击