Tuesday, January 15, 2013

[Android] 網路編程

android的網絡編程分為2種:基於socket的,和基於http協議的。




基於socket的用法



  服務器端:



  先啟動一個服務器端的socket ServerSocket svr = new ServerSocket(8989);



  開始偵聽請求         Socket s = svr.accept();



  取得輸入和輸出        DataInputStream dis = new DataInputStream(s.getInputStream());



                 DataOutputStream dos = new DataOutputStream(s.getOutputStream());



  Socket 的交互通過流來完成,即是說傳送的字節流,因此任何文件都可以在上面傳送。誰打開的記得要關上。



  用DataInputStream/DataOutputStream來進行包裝是因為我們想要他們對基本數據類型的讀寫功能readInt(),writeInt(),readUTF(),writeUTF()等等。



  客戶端:



  發起一個socket連接      Socket s = new Socket("192.168.1.200",8989);



  取得輸入和輸出        DataInputStream dis = new DataInputStream(s.getInputStream());



                 DataOutputStream dos = new DataOutputStream(s.getOutputStream());



  之後就可以相互通信了。誰打開的記得要關上。



基於Http協議



  一般是發送請求到某個應用服務器。此時需要用到HttpURLConnection



  先取得HttpURLConnection urlConn = new URL("http://www.google.com").openConnection();



  設置標誌 



    urlConn.setDoOutput(true); urlConn.setDoInput(true);//post的情況下需要設置DoOutput為true



    urlConn.setRequestMethod("POST");



    urlConn.setUseCache(false);//設置是否用緩存



    urlConn.setRequestProperty("Content-type","application/x-www-form-urlencoded");//設置content-type



  獲得輸出流,便於想服務器發送信息。



    DataOutputStream dos = new DataOutputStream(urlConn.getOutputStream());



  望流裏面寫請求參數



    dos.writeBytes("name="+URLEncoder.encode("chenmouren","gb2312");



    dos.flush();dos.close();//發送完後馬上關閉。



  獲得輸入流,取數據



    BufferReader reader = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));



    reader.readLine();//用 !=null來判斷是否結束



    reader.close();



  讀完了記得關閉connection  urlConn.disconnect();



流程記錄就到此為止。

No comments:

Post a Comment