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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

4、置)connection.setdoinput(true); / 設(shè)置輸出流(post 時(shí)必須設(shè)置)connection.setrequestmethod(post); / 設(shè)置方式為post(post 時(shí)必須設(shè)置)connection.setinstancefollowredirects(true); / 設(shè)置該請(qǐng)求是否重定向connection.disconnect(); / 關(guān)閉 httpurlconnection 連接注:如果使用post 方式,還需要設(shè)置請(qǐng)求的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)建一個(gè) get 方式的 http 請(qǐng)求,然后通過httpclient 來執(zhí)行這個(gè)請(qǐng)求, httpresponse 在接收這個(gè)請(qǐng)求后給出響應(yīng),最后通過“httpresponse.getstatusline().getstatuscode() 來判斷請(qǐng)求是否成功,并處理??梢灾苯邮褂萌缦路椒▽㈨憫?yīng)的實(shí)體元信息轉(zhuǎn)化為字符串strings

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

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

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

9、se 是一個(gè) http連接響應(yīng), 當(dāng)執(zhí)行一個(gè)http 連接后,就會(huì)返回一個(gè)httpresponse,可以通過其獲得一些響應(yīng)信息。下面是請(qǐng)求一個(gè)http 連接并獲得該請(qǐng)求是否成功的代碼: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ù)器實(shí)現(xiàn)步驟:指定端口實(shí)例化一個(gè)serversocket 調(diào)用 serversocket 的 accept()以在等待連接期間造成阻塞獲取位于該底層socket 的流以進(jìn)行讀寫操作將數(shù)據(jù)封裝成流對(duì) socket 進(jìn)行讀寫關(guān)閉打開的流(2)客戶端實(shí)現(xiàn)步驟:通過 ip地址和端口實(shí)例化socket,請(qǐng)求連接服務(wù)器獲取 socket 上的流以進(jìn)行讀寫把流包裝進(jìn)bufferedreader/printwriter的實(shí)例對(duì) socket 進(jìn)行讀寫關(guān)閉打開的流擴(kuò)展 :網(wǎng)絡(luò)通信的中文亂碼問題網(wǎng)絡(luò)通信中,產(chǎn)生亂碼的原因主要是通信過程中使用了不同的編碼方式: 服務(wù)器中的編碼方式,傳輸過程中的編碼方式,傳輸?shù)竭_(dá)中斷設(shè)備的編碼方式。因此在傳輸過程中就需要至少兩次編碼轉(zhuǎn)換:首先從服務(wù)器編碼轉(zhuǎn)換為網(wǎng)絡(luò)編碼,再從網(wǎng)絡(luò)編碼轉(zhuǎn)換為終端設(shè)備編碼。在轉(zhuǎn)換過程中發(fā)生任何情況都可能引起編碼混亂,一般情況下我們可以通過以下兩種方式來避免這個(gè)問題。一種方式是:由于大部分終端設(shè)備都支持unicode 字符集,所以在連接網(wǎng)頁時(shí),我們希望網(wǎng)頁數(shù)據(jù)在網(wǎng)絡(luò)傳輸時(shí)使用 utf-8 方式傳輸,這樣就可以很簡(jiǎn)單地將utf-8 轉(zhuǎn)換成unicode 字符集了。另一種

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論