Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android網絡應用開發完全解析

android網絡應用開發完全解析

編輯:關於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 block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.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
     */
    public static byte[] 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
     */
    public static byte[] 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。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved