Http通信與Socket通信_筆記_第1頁
Http通信與Socket通信_筆記_第2頁
Http通信與Socket通信_筆記_第3頁
Http通信與Socket通信_筆記_第4頁
Http通信與Socket通信_筆記_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、網(wǎng)絡(luò)編程 :http 通信與 socket通信知識點概述 : 1.httpurlconnection 接口 :get 和 post 方式2.httpclient 接口 :get 和 post 方式3.socket 通信:面向連接 (tcp) 和無連接的 (udp) 知識點詳述 : 前序 :http通信http (超文本傳輸協(xié)議)用于傳送www 方式的數(shù)據(jù),采用了請求 /響應(yīng)模型。 客戶端向服務(wù)器發(fā)送一個請求,請求頭包含了請求的方法、uri、協(xié)議版本,以及包含請求修飾符、客戶信息和內(nèi)容的類似于mime 的消息結(jié)構(gòu)。服務(wù)器以一個狀態(tài)行作為響應(yīng),響應(yīng)的內(nèi)容包括消息協(xié)議的版本、成功或者錯誤編碼,還包含

2、服務(wù)器信息、實體元信息以及可能的實體內(nèi)容。它是一個屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡潔、快速,它適用于分布式超媒體信息系統(tǒng)。在 internet 上,http 通信通常發(fā)生在tcp/ip連接之上,缺省端口是tcp 80,但其他的端口也是可用的。這并不預(yù)示著http 協(xié)議在 internet或其它網(wǎng)絡(luò)的其他協(xié)議之上才能完成,http 只預(yù)示著一個可靠地傳輸。 android 提供了 httpurlconnection 和 httpclient接口來開發(fā)http 程序。1. httpurlconnection 接口.* 提供http通信中使用最多的就是get 和 post,get 請求可以獲取靜

3、態(tài)頁面,也可以把參數(shù)放在url字符串后面,傳遞給服務(wù)器。 post 與 get 的不同之處在于post 的參數(shù)不是放在url 字 符 串 里 面 , 而 是 放 在http請 求 數(shù) 據(jù) 中 。httpurlconnection 是 java的標準類,繼承自urlconnection類,兩個類都是抽象類,無法直接實例化對象。其對象主要通過 url的 openconnection 方法獲得。每次 openconnection都將創(chuàng)建一個新的實例,在連接之前我們可以對其一些屬性進行設(shè)置,比如超時時間等:connection.setdooutput(true); / 設(shè)置輸入流( post 時必須設(shè)

4、置)connection.setdoinput(true); / 設(shè)置輸出流(post 時必須設(shè)置)connection.setrequestmethod(post); / 設(shè)置方式為post(post 時必須設(shè)置)connection.setinstancefollowredirects(true); / 設(shè)置該請求是否重定向connection.disconnect(); / 關(guān)閉 httpurlconnection 連接注:如果使用post 方式,還需要設(shè)置請求的content-type connection.setrequestproperty(content-type,applica

5、tion/x-www-form-urlencoded); 2. httpclient 接口 (apache 接口 ,包名 :org.apache.http.*) ,需要了解一些類:(1)httpclient 使用 get 方式獲取數(shù)據(jù), 需要使用 httpget 來構(gòu)建一個 get 方式的 http 請求,然后通過httpclient 來執(zhí)行這個請求, httpresponse 在接收這個請求后給出響應(yīng),最后通過“httpresponse.getstatusline().getstatuscode() 來判斷請求是否成功,并處理??梢灾苯邮褂萌缦路椒▽㈨憫?yīng)的實體元信息轉(zhuǎn)化為字符串strings

6、trresult = entityutils.tostring(httpresponse.getentity(); httpclient 的 get 方式請求步驟:封裝 httpget 請求new httpget (urlstr)獲取 httpclient 實例new defaulthttpclient () ;發(fā)送請求 ,接收響應(yīng)httpresponse = httpclient.excute(httpget) 判斷響應(yīng)碼是不是200.如果是 200,接收響應(yīng)數(shù)據(jù)httpentity =httpresponse.getentity(); httpclient 使用 post 方式獲取數(shù)據(jù)稍微

7、復(fù)雜一點。首先好使用 httppost 來構(gòu)建一個post 方式的 http 請求,httpposthttprequest=new httppost(url); 需要使用namevaluepair 來保存要傳遞的參數(shù),可以使用basicnamevaluepair 來構(gòu)造一個要被傳遞的參數(shù),然后通過add 方法添加這個參數(shù)到namevaluepair 中,listparams=new arraylist(); / 使用 namevaluepair 來保存要傳遞的post 參數(shù)params.add(new basicnamevaluepair(par,httpclient_android_post

8、); / 添加要傳遞的參數(shù)post 方式還需要設(shè)置所使用的字符集,最后就和get 方式一樣通過httpclient 來請求這個連接,返回響應(yīng)并處理,httpentityhttpentity=new urlencodedformentity(params,utf-8); / 設(shè)置字符集httprequest.setentity(httpentity); / 為請求設(shè)置實體元信息(2)defaulthttpclient是默認的一個http 客戶端,我們可以使用它創(chuàng)建一個http連接。代碼如下: httpclienthc=new defaulthttpclient(); (3) httprespon

9、se 是一個 http連接響應(yīng), 當執(zhí)行一個http 連接后,就會返回一個httpresponse,可以通過其獲得一些響應(yīng)信息。下面是請求一個http 連接并獲得該請求是否成功的代碼:httpresponsehresponse=hc.execute(httprequest); if(hresponse.getstatusline().getstatuscode()=httpstatus.sc_ok) /連接成功 3 socket通信socket 稱為”套接字“,用于描述ip 地址和端口,它是支持 tcp/ip協(xié)議的網(wǎng)絡(luò)通信的基本操作單元。有兩種主要的操作方式: 面向連接 (tcp協(xié)議)和無連接

10、 (udp協(xié)議)的。面向連接的操作比無連接操作的效率更低,但是數(shù)據(jù)的安全性更高。android socket 編程(1)服務(wù)器實現(xiàn)步驟:指定端口實例化一個serversocket 調(diào)用 serversocket 的 accept()以在等待連接期間造成阻塞獲取位于該底層socket 的流以進行讀寫操作將數(shù)據(jù)封裝成流對 socket 進行讀寫關(guān)閉打開的流(2)客戶端實現(xiàn)步驟:通過 ip地址和端口實例化socket,請求連接服務(wù)器獲取 socket 上的流以進行讀寫把流包裝進bufferedreader/printwriter的實例對 socket 進行讀寫關(guān)閉打開的流擴展 :網(wǎng)絡(luò)通信的中文亂碼問題網(wǎng)絡(luò)通信中,產(chǎn)生亂碼的原因主要是通信過程中使用了不同的編碼方式: 服務(wù)器中的編碼方式,傳輸過程中的編碼方式,傳輸?shù)竭_中斷設(shè)備的編碼方式。因此在傳輸過程中就需要至少兩次編碼轉(zhuǎn)換:首先從服務(wù)器編碼轉(zhuǎn)換為網(wǎng)絡(luò)編碼,再從網(wǎng)絡(luò)編碼轉(zhuǎn)換為終端設(shè)備編碼。在轉(zhuǎn)換過程中發(fā)生任何情況都可能引起編碼混亂,一般情況下我們可以通過以下兩種方式來避免這個問題。一種方式是:由于大部分終端設(shè)備都支持unicode 字符集,所以在連接網(wǎng)頁時,我們希望網(wǎng)頁數(shù)據(jù)在網(wǎng)絡(luò)傳輸時使用 utf-8 方式傳輸,這樣就可以很簡單地將utf-8 轉(zhuǎn)換成unicode 字符集了。另一種

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論