




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、在J2ME網(wǎng)絡(luò)程序開發(fā)過程中,為了節(jié)約用戶支付的網(wǎng)絡(luò)費(fèi)用,很多J2ME手機(jī)網(wǎng)絡(luò)程序都支持CMWAP代理。但是由于CMWAP只是中國(guó)移動(dòng)建立的一個(gè)HTTP網(wǎng)絡(luò)服務(wù)器,所以在使用HTTP網(wǎng)絡(luò)編程中,可以很方便的使用。但是在使用socket方法操作時(shí),這個(gè)方式好象就行不通了。下面就介紹一下如何使用socket連接來穿越CMWAP代理。其實(shí)由于CMWAP是一個(gè)標(biāo)準(zhǔn)的HTTP代理服務(wù)器,也就是說可以處理任何的基于HTTP協(xié)議的轉(zhuǎn)發(fā)請(qǐng)求,那么就可以使用socket方式編程時(shí)使用HTTP協(xié)議即可了。實(shí)現(xiàn)原理:使用socket和CMWAP建立連接,然后將網(wǎng)絡(luò)協(xié)議設(shè)計(jì)成HTTP協(xié)議的格式,這樣CMWAP就可以繼
2、續(xù)實(shí)現(xiàn)請(qǐng)求的轉(zhuǎn)發(fā)了,這就是實(shí)現(xiàn)的基本原理。當(dāng)然,由于socket連接方式可以實(shí)現(xiàn)持續(xù)連接,這里的持續(xù)連接只存在于手機(jī)和CMWAP之間,但是可以只建立一次連接就實(shí)現(xiàn)多次的發(fā)送,還是基于請(qǐng)求-響應(yīng)結(jié)構(gòu)實(shí)現(xiàn)的,所以可以說實(shí)現(xiàn)了一部分socket的功能,而服務(wù)器端可以采用已有的HTTP服務(wù)器,從而降低開發(fā)成本和時(shí)間。該技術(shù)的優(yōu)勢(shì)主要有以下幾點(diǎn):u 使用CMWAP進(jìn)行數(shù)據(jù)傳輸,可以為用戶節(jié)約流量費(fèi)用。u 由于手機(jī)和CMWAP之間建立的是持續(xù)連接,所以可以提高網(wǎng)絡(luò)
3、響應(yīng)速度。u 使用該方式,可以實(shí)現(xiàn)服務(wù)器端兼容HTTP連接和socket連接,也就是使用一組服務(wù)器,降低開發(fā)成本和減少開發(fā)時(shí)間。實(shí)現(xiàn)網(wǎng)絡(luò)操作的代碼如下所示:package cmwaptest;import java.io.*;import javax.microedition.io.*;/* * 測(cè)試使用socket連接穿越CMWAP服務(wù)器 */public class CmwapThread extends Thread CmwapForm cf; public CmwapThread(CmwapForm cf) thi
4、s.cf = cf; public void run() try /測(cè)試 cf.displayInfo("開始建立連接!"); /使用代理連接 SocketConnection sc = (SocketConnection)Connector.open("socket:/72:80"); /測(cè)試 cf.displayInfo("連接建立完畢!"); /發(fā)送數(shù)據(jù) OutputStream os = sc.openOutputStream(); String requestLine = "
5、;get http/1.0rn" String header = "accept:*/*rnrn" os.write(requestLine.getBytes(); os.write(header.getBytes(); os.flush(); /測(cè)試 cf.displayInfo("數(shù)據(jù)發(fā)送完畢!"); /接收數(shù)據(jù) InputStream is = sc.openInputStream(); byte data = new byte10240; int num = is.read(data); /測(cè)試 cf
6、.displayInfo("數(shù)據(jù)接受完畢!" + "數(shù)據(jù)長(zhǎng)度為:"+ num); /處理數(shù)據(jù) cf.doStr(data,num); sc.close(); catch(Exception e) /e.printStackTrace(); cf.doError(e.toString(); 請(qǐng)問一下你的實(shí)測(cè)結(jié)果如何? 我的實(shí)測(cè)環(huán)境是:服務(wù)器采用tomcat+servlet,手機(jī)是motorola e398,實(shí)測(cè)結(jié)果如下: 1、關(guān)于第一點(diǎn),如果用HttpConnection的GET方式收只有一個(gè)字符a的網(wǎng)頁(yè)流量是1101,SocketConnec
7、tion是929,我想這是HttpConnection底層實(shí)現(xiàn)添加了一些http頭的原因。 2、關(guān)于第二點(diǎn),wap網(wǎng)關(guān)會(huì)自動(dòng)添加“connection: close”,如果是http服務(wù)器,也會(huì)相應(yīng)返回這個(gè)標(biāo)志并關(guān)閉鏈接(這點(diǎn)在rfc2616中也有說明)。所以說想持續(xù)連接是不太可能的,如果自己寫一個(gè)服務(wù)器來解析HTTP,忽略這個(gè)標(biāo)志會(huì)如何,這些我就沒有試了。:)to alien75 : 首先感謝你的實(shí)際測(cè)試。 關(guān)于你提到的問題,解釋如下: 1、關(guān)于這個(gè)流量問題,你可以控制客戶端以及服務(wù)器端的頭信息數(shù)量來達(dá)到控制流量的目的,而且CMWAP的收費(fèi)可以包月,這個(gè)是CMNET無法比擬的。 2、通過這種
8、方式實(shí)現(xiàn)的是半持續(xù)的連接,也就是只有手機(jī)和CMWAP直接是以socket進(jìn)行連接,所以是持續(xù)的,而CMWAP和服務(wù)器之間使用的是HTTP連接,這個(gè)是每次需要重新建立的。但是HTTP編程最大的延遲來自于重新建立連接,所以使用該方式傳輸數(shù)據(jù)雖然無法利用過多的socket特性,但是可以在節(jié)約費(fèi)用的同時(shí),實(shí)現(xiàn)響應(yīng)速度的提高。 最后補(bǔ)充一點(diǎn),該種技術(shù)只是一種過渡技術(shù),隨著socket的普及以及費(fèi)用的降低,這種技術(shù)會(huì)被淘汰。更正一點(diǎn),我不是取的網(wǎng)頁(yè),而是在servlet中直接用輸入輸出流來做的。to mailbomb: 多謝你的用時(shí)回復(fù) 針對(duì)你的第二點(diǎn)說明,我做了一個(gè)簡(jiǎn)單測(cè)試。還是相同的測(cè)試環(huán)境和測(cè)試數(shù)據(jù)
9、,做了兩種測(cè)試。結(jié)果如下: 1、檢測(cè)數(shù)據(jù)負(fù)載效率。每隔5秒發(fā)一個(gè)請(qǐng)求,20次后流量是11852。如果是HTTP方式,每一次事務(wù)請(qǐng)求從發(fā)起到完成都要大概1K吧。 2、檢測(cè)手機(jī)多長(zhǎng)時(shí)間不發(fā)數(shù)據(jù)WAP網(wǎng)關(guān)會(huì)斷開鏈接。我是通過發(fā)送拋出異常來判斷,發(fā)現(xiàn)這個(gè)值是25秒左右。測(cè)試時(shí)間是上午10點(diǎn),而且我覺得這個(gè)值與各地的網(wǎng)關(guān)類型以及高峰時(shí)段應(yīng)該有關(guān)連,所以只能做為一個(gè)參考值。因此象那種想利用現(xiàn)有連接發(fā)送的數(shù)據(jù)間隔不能太長(zhǎng),否則還是要重連的。 由此看來這種方式在目前是可行的,不知道3G出來后,CMCC會(huì)不會(huì)開放SOCKET? 在此再惡一把CMCC,就咱中國(guó)還分個(gè)什么CMNET和CMWAP,也算是中國(guó)特色吧。
10、_/使用代理連接 SocketConnection sc = (SocketConnection)Connector.open("socket:/72:80"); 之后,如何連接到我的url服務(wù)器? 返回的消息是不是可以保證完整性?to orient : 其實(shí)CMWAP是一個(gè)HTTP代理服務(wù)器,所以你的URL地址包含在發(fā)送過去的協(xié)議數(shù)據(jù)中,如代碼: String requestLine = "get http/1.0rn" 這里是發(fā)送到的地址非常感激你的回復(fù)。 因?yàn)槲乙7耤mnet連接,那么協(xié)議數(shù)據(jù)中每次都有URL地址,同時(shí)我的消息(b
11、yte 形式)也放在里邊么? 代理服務(wù)器(cmwap)如何轉(zhuǎn)發(fā)我的消息(byte 形式)到我的指定服務(wù)器。 因?yàn)槟愕腟tring requestLine = "get http/1.0rn" 是get連接方式么。 如果方便,請(qǐng)你留下MSN。我的是jadyorient可以寫一個(gè)post 連接的例子么。 呵 URL: static final String HOST = "03" static final int TCP_PORT = 9002; 我登陸平臺(tái)時(shí) 發(fā)送消息 : 其中類型(short),賬號(hào)(short),密碼3項(xiàng)(st
12、ring)。 服務(wù)器返回消息: 其中類型(short),ok (byte)。 手機(jī)6600。to orient : 只需要做如下更改即可: String requestLine = "post 03:9002 http/1.0rn" 你的協(xié)議部分可以寫入實(shí)體數(shù)據(jù)部分即可使用Socket連接穿越CMWAP代理作者:陳躍峰出自:版權(quán)所有,未經(jīng)允許嚴(yán)禁轉(zhuǎn)載! 在J2ME網(wǎng)絡(luò)程序開發(fā)過程中,為了節(jié)約用戶支付的網(wǎng)絡(luò)費(fèi)用,很多J2ME手機(jī)網(wǎng)絡(luò)程序都支持CMWAP代理。但是由于CMWAP只是中國(guó)移動(dòng)建立的一個(gè)HTTP網(wǎng)絡(luò)服務(wù)器,所以在使用H
13、TTP網(wǎng)絡(luò)編程中,可以很方便的使用。但是在使用socket方法操作時(shí),這個(gè)方式好象就行不通了。下面就介紹一下如何使用socket連接來穿越CMWAP代理。其實(shí)由于CMWAP是一個(gè)標(biāo)準(zhǔn)的HTTP代理服務(wù)器,也就是說可以處理任何的基于HTTP協(xié)議的轉(zhuǎn)發(fā)請(qǐng)求,那么就可以使用socket方式編程時(shí)使用HTTP協(xié)議即可了。實(shí)現(xiàn)原理:使用socket和CMWAP建立連接,然后將網(wǎng)絡(luò)協(xié)議設(shè)計(jì)成HTTP協(xié)議的格式,這樣CMWAP就可以繼續(xù)實(shí)現(xiàn)請(qǐng)求的轉(zhuǎn)發(fā)了,這就是實(shí)現(xiàn)的基本原理。當(dāng)然,由于socket連接方式可以實(shí)現(xiàn)持續(xù)連接,這里的持續(xù)連接只存在于手機(jī)和CMWAP之間,但是可以只建立一次連接就實(shí)現(xiàn)多次的發(fā)送,還
14、是基于請(qǐng)求-響應(yīng)結(jié)構(gòu)實(shí)現(xiàn)的,所以可以說實(shí)現(xiàn)了一部分socket的功能,而服務(wù)器端可以采用已有的HTTP服務(wù)器,從而降低開發(fā)成本和時(shí)間。該技術(shù)的優(yōu)勢(shì)主要有以下幾點(diǎn):u 使用CMWAP進(jìn)行數(shù)據(jù)傳輸,可以為用戶節(jié)約流量費(fèi)用。u 由于手機(jī)和CMWAP之間建立的是持續(xù)連接,所以可以提高網(wǎng)絡(luò)響應(yīng)速度。u 使用該方式,可以實(shí)現(xiàn)服務(wù)器端兼容HTTP連接和socket連接,也就是使用一組服務(wù)器,降低
15、開發(fā)成本和減少開發(fā)時(shí)間。實(shí)現(xiàn)網(wǎng)絡(luò)操作的代碼如下所示:package cmwaptest;import java.io.*;import javax.microedition.io.*;/* * 測(cè)試使用socket連接穿越CMWAP服務(wù)器 */public class CmwapThread extends Thread CmwapForm cf; public CmwapThread(CmwapForm cf) this.cf = cf; public void run() try /測(cè)試 cf.displayInfo("開始建立連接!"); /使用代理連接
16、 SocketConnection sc = (SocketConnection)Connector.open("socket:/72:80"); /測(cè)試 cf.displayInfo("連接建立完畢!"); /發(fā)送數(shù)據(jù) OutputStream os = sc.openOutputStream(); String requestLine = "get http/1.0rn" String header = "accept:*/*rnrn" os.write(requestLine.getBytes(); os.write(header.getBytes(); os.flush(); /測(cè)試 cf.displayInfo("數(shù)據(jù)發(fā)送完畢!"); /接收數(shù)據(jù) InputStre
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年工業(yè)互聯(lián)網(wǎng)平臺(tái)網(wǎng)絡(luò)流量整形技術(shù)在工業(yè)互聯(lián)網(wǎng)平臺(tái)產(chǎn)業(yè)融合中的應(yīng)用報(bào)告001
- 2025年醫(yī)藥企業(yè)研發(fā)外包(CRO)模式創(chuàng)新與實(shí)踐案例深度解析報(bào)告
- 北京初中化學(xué)題庫(kù)及答案
- 保險(xiǎn)師考試試題及答案
- 安全救護(hù)知識(shí)試題及答案
- 2025年金融數(shù)據(jù)治理與資產(chǎn)化:金融行業(yè)數(shù)據(jù)共享平臺(tái)建設(shè)報(bào)告
- 中國(guó)冬夏氣溫課件視頻
- 中國(guó)入境旅游課件
- 中國(guó)傳統(tǒng)道德自考課件
- 河北省定州市第五中學(xué)2025屆英語(yǔ)八下期中復(fù)習(xí)檢測(cè)模擬試題含答案
- 遼寧省大連市甘井子區(qū)2023-2024學(xué)年八年級(jí)下學(xué)期期末考試物理試題
- 《抖音:短視頻與直播運(yùn)營(yíng)(慕課版)》-課件-項(xiàng)目六-抖音直播的復(fù)盤
- 專升本合同范本
- 眼科淚器病診療規(guī)范2023版
- 老年人體檢分析報(bào)告及改進(jìn)措施
- SAG超級(jí)抗原 細(xì)胞免疫抗衰
- 2024年湘潭電化產(chǎn)投控股集團(tuán)有限公司招聘筆試沖刺題(帶答案解析)
- GB/T 13077-2024鋁合金無縫氣瓶定期檢驗(yàn)與評(píng)定
- SY-T 6966-2023 輸油氣管道工程安全儀表系統(tǒng)設(shè)計(jì)規(guī)范
- 杜邦十大安全管理理念課件
- 身份證知識(shí)課件
評(píng)論
0/150
提交評(píng)論