android網路應用開發完全解析

來源:互聯網
上載者:User

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。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.