android网络应用开发完全解析

Android网络应用开发,主要有两种方式,一种是socket(是对tcp/udp协议的封装),另外一种就是使用Http协议,Android中主要提供了两种方式,,HttpURLConnection和Apache HttpClient。下面对Android网络应用开发进行具体的阐述。

一、基于socket的网络通信1、基于udp的socket编程步骤

定义码头 即:定义一个DatagramSocket对象ds

定义可以用来接收或者发送数据的集装箱 即:定义DatagramPacket对象dp

在码头上用集装箱接受对象发送过来的数据(ds.receive(dp))

关闭码头(ds.close())

2、基于tcp的socket编程步骤

二、使用HTTP协议访问网络资源1、HttpURLConnection

JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能:HttpURLConnection。HttpURLConnection是java的标准类,HttpURLConnection继承自URLConnection,可用于向指定网站发送GET请求、POST请求。

下面是一个使用HttpURLConnection类的get请求访问网络的工具类:

/*** getInputStream函数是为了获取读取服务器端资源的字节输入流* @param path是url字符串* @return InputStream*/public static InputStream getInputStream(String path) {URL url = null;try {url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 设置请求方式conn.setRequestMethod(“GET”);// 设置连接的超时时间conn.setConnectTimeout(5000);// 设置可以从服务器端读取数据conn.setDoInput(true);// 获取服务器端的响应码if (conn.getResponseCode() == 200) {// 获得读取服务器端资源的字节输入流InputStream in = conn.getInputStream();return in;}} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}2、Apache HttpClient

HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

httpClient就是一个增强版的HttpURLConnection,HttpURLConnection可以做的事情HttpClient全部可以做;HttpURLConnection没有提供的有些功能,HttpClient也提供了,但它只是关注于如何发送请求、接收响应,以及管理HTTP连接。

下面是使用httpClient get方式访问网络的工具类:

/*** 读取输入流,返回数据* @param stream* @return*/[] readStream(InputStream stream) throws IOException{byte[] ret = null;ByteArrayOutputStream bout = new ByteArrayOutputStream();byte[] buf = new byte[128];int len;while (true) {len = stream.read(buf);if (len == -1) {break;}bout.write(buf, 0, len);}//强制释放临时的资源buf = null;ret = bout.toByteArray();bout.close();return ret;}/*** get请求方法* @param url 网址* @return*/[] doGet(String url) {byte[] ret = null;HttpGet request = new HttpGet(url);HttpClient client = new DefaultHttpClient();try {HttpResponse response = client.execute(request);StatusLine statusLine = response.getStatusLine();int statusCode = statusLine.getStatusCode();if (statusCode == 200) {HttpEntity entity = response.getEntity();InputStream stream = entity.getContent();//返回的实际数据ret = readStream(stream);stream.close();}} catch (IOException e) {e.printStackTrace();}return ret;}3、HttpURLConnection与HttpClient的区别

在Android 2.2版本之前,HttpClient拥有较少的bug,因此使用它是最好的选择。在Android 2.3版本及以后,HttpURLConnection则是最佳的选择。对于新的应用程序应该更加偏向于使用HttpURLConnection。

具体参考:Android访问网络,使用HttpURLConnection还是HttpClient?

要纠正别人之前,先反省自己有没有犯错

android网络应用开发完全解析

相关文章:

你感兴趣的文章:

标签云: