Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android開發筆記之網絡編程—使用TCP協議和URL進行網絡編程

android開發筆記之網絡編程—使用TCP協議和URL進行網絡編程

編輯:關於Android編程

手機本身是作為手機終端使用的,因此它的計算能力,存儲能力都是有限的。它的主要優勢是攜帶方便,可以隨時打開,而且手機通常總是處於聯網狀態。因此網絡支持對於手機應用非常重要。

Android完全支持JDK本身的TCP,UDP網絡通信API,也可以使用ServerSocket,Socket來建立基於TCP/IP協議的網絡通信,也可以使用DatagramSocket,Datagrampacket來建立基於UDP協議的網絡通信。

Android也支持JDK提供的URL,URLConnection等網絡通信API。

Android還內置了HttpClient,和HttpUrlConnection這樣可以非常方便地發送HTTP請求,並獲取Http響應。

——基於TCP協議的編程

    使用Socket,ServerSocket編程:

    使用多線程,handler機制完成網絡編程.

    注意:由於手機無線上網的IP地址通常都是由移動運營公司動態分配的,一般不會有自己固定的IP地址,因此很少在手機上運行服務器端,服務器端通常運行在有固定IP的服務器上。

    ①跟網絡有關的就要加Internet權限

    ②網絡數據的請求要在子線程中進行

    ③更新UI需要借助Handler機制

    ④編碼問題:Android默認編碼為UTF-8   Java默認編碼為GB2312

    ⑤本機IP地址問題:使用127.0.0.1在模擬中不能訪問到本地的服務器,因為模擬器也在本機

最後有使用Socket,ServerSocket網絡編程的示例

——使用URL進行網絡編程

   **——使用URL訪問網絡資源**

   URL對象代表統一資源定位符。它是指向互聯網中的資源。該資源可以是簡單的文件或目錄。也可以是對更復雜的對象的引用。

   URL的格式:protocol://host:port/resourceName

   可以使用構造器創建URL對象,一旦獲得URL對象,可以調用如下的方法訪問該URL對應的資源:

  String getFile():獲取URL的資源名

  String getHost():獲取URL的主機名

  String getPath():獲取URL的路徑部分

  int getPort():獲取URL的端口號

  String getProtocol():獲取URL的協議名稱

  String getQuery():獲取URL的查詢字符串部分

  InputStream url.openStream():打開URL的連接,返回一個讀取該資源的InputStream。

   **——使用URLConnection提交請求**

   URL的openConnection()方法將返回一個URLConnection,該對象表示應用程序和URL之間的通信連接,程序可以通過URLConnection實例向該URL發送請求,讀取URL引用的資源。通常創建一個和URL的連接,並發送請求,讀取此URL引用的資源。 

需要如下步驟:

a)通過調用URL對象openConnection()方法來創建URLConnection對象

b)設置URLConnection的參數和普通請求屬性

conn.setRequestProperty("accept","*/*");

conn.setRequestProperty("connection","Keep-Alive");

conn.setRequestProperty("user-agent","Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.1;SV1)");

conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

//發送POST請求必須設置如下兩行**

conn.setDoInput(true):設置該URLConnection的doInput請求頭字段的值

coon.setDoOutput(true):

c)調用connect():打開到此URL引用的資源的通信鏈接(如果尚未建立這樣的連接)。

如果在已打開連接(此時 connected 字段的值為 true)的情況下調用 connect 方法,則忽略該調用.

URLConnection 對象經歷兩個階段:首先創建對象,然後建立連接。

在創建對象之後,建立連接之前,可指定各種選項(例如doInput和UseCaches).連接後再進行設置就會發生錯誤。連接後才能進行的操作(例如getContentLength),如有必要,將隱式執行連接.

d)如果只是發送GET方式請求,使用connect方法建立和遠程資源之間的實際連接即可,在請求的地址中傳入數據。

如果需要發送Post方法請求。需要獲取
URLConnection實例對應的輸出流來發送請求參數,

 PrintWriter out=new PrintWriter(conn.getOutputStream());
 //解決亂碼問題

 String n=EncodingUtils.getString("張三".getBytes(),"UTF-8");

 out.write("name="+n+"&pwd="+pwd);

 out.flush();//刷新輸出流的緩沖

e)遠程資源變為可用,程序可以訪問遠程資源的頭字段或通過輸入流讀取遠程資源的數據。

getInputStream()獲取輸入流。
從輸入流讀取response的數據。

注意:

1)如果既要使用輸入流讀取URLConnection響應的內容,也要使用輸出流發送請求參數,一定要先使用輸出流,再使用輸入流。

2)借助於URLConnection類的幫助,應用程序可以非常方便地與指定站點交換信息,包括發送GET請求,POST請求,並獲取網站的響應等。

使用Socket,ServerSocket編程示例:

效果:

這裡寫圖片描述

ServerHuadong為服務器
基於TCPIP協議網絡編程為客戶端

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