版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 無人機(jī)精準(zhǔn)農(nóng)業(yè)-洞察分析
- 虛擬現(xiàn)實(shí)技術(shù)在言語康復(fù)中的應(yīng)用研究-洞察分析
- 舞臺(tái)視覺特效-第3篇-洞察分析
- 網(wǎng)絡(luò)化維修服務(wù)模式-洞察分析
- 網(wǎng)絡(luò)文學(xué)與傳統(tǒng)文學(xué)的敘事比較-洞察分析
- 異常安全風(fēng)險(xiǎn)評(píng)估-洞察分析
- 向廠長(zhǎng)提出調(diào)換工作崗位的申請(qǐng)書范文(7篇)
- 藝術(shù)空間激活社區(qū)活力-洞察分析
- 微納光學(xué)器件在量子計(jì)算中的應(yīng)用-洞察分析
- 水熱處理對(duì)茶葉品質(zhì)影響-洞察分析
- 四川省簡(jiǎn)陽市禾豐鎮(zhèn)初級(jí)中學(xué)-2025年蛇年寒假特色作業(yè)【課件】
- 滬教版(上海)七年級(jí)上學(xué)期全部章節(jié)知識(shí)點(diǎn)總結(jié)
- GB/T 45004-2024鋼鐵行業(yè)低碳企業(yè)評(píng)價(jià)指南
- 2024年全國(guó)統(tǒng)一電力市場(chǎng)建設(shè)情況及展望報(bào)告-中國(guó)電力企業(yè)聯(lián)合會(huì)(潘躍龍)
- 2024年招商部門工作計(jì)劃(3篇)
- DB21T 2748-2017 拉氏鱥池塘養(yǎng)殖技術(shù)規(guī)范
- 運(yùn)河鎮(zhèn)江段航道疏浚工程環(huán)評(píng)資料環(huán)境影響
- 第一單元知識(shí)提綱(填空版) -2024-2025學(xué)年統(tǒng)編版道德與法治七年級(jí) 上冊(cè)
- 2024學(xué)年第一學(xué)期杭州市高三年級(jí)教學(xué)質(zhì)量檢測(cè)試題(杭州一模)含答案
- 生理學(xué)課件全套課件
- 《幸福終點(diǎn)站》電影賞析
評(píng)論
0/150
提交評(píng)論