使用Socket連接穿越CMWAP代理直聯(lián)_第1頁(yè)
使用Socket連接穿越CMWAP代理直聯(lián)_第2頁(yè)
使用Socket連接穿越CMWAP代理直聯(lián)_第3頁(yè)
使用Socket連接穿越CMWAP代理直聯(lián)_第4頁(yè)
使用Socket連接穿越CMWAP代理直聯(lián)_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、在J2ME網(wǎng)絡(luò)程序開(kāi)發(fā)過(guò)程中,為了節(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連接來(lái)穿越CMWAP代理。其實(shí)由于CMWAP是一個(gè)標(biāo)準(zhǔn)的HTTP代理服務(wù)器,也就是說(shuō)可以處理任何的基于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)的,所以可以說(shuō)實(shí)現(xiàn)了一部分socket的功能,而服務(wù)器端可以采用已有的HTTP服務(wù)器,從而降低開(kāi)發(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ù)器,降低開(kāi)發(fā)成本和減少開(kāi)發(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("開(kāi)始建立連接!"); /使用代理連接 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)問(wèn)一下你的實(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中也有說(shuō)明)。所以說(shuō)想持續(xù)連接是不太可能的,如果自己寫(xiě)一個(gè)服務(wù)器來(lái)解析HTTP,忽略這個(gè)標(biāo)志會(huì)如何,這些我就沒(méi)有試了。:)to alien75 : 首先感謝你的實(shí)際測(cè)試。 關(guān)于你提到的問(wèn)題,解釋如下: 1、關(guān)于這個(gè)流量問(wèn)題,你可以控制客戶端以及服務(wù)器端的頭信息數(shù)量來(lái)達(dá)到控制流量的目的,而且CMWAP的收費(fèi)可以包月,這個(gè)是CMNET無(wú)法比擬的。 2、通過(guò)這種

8、方式實(shí)現(xiàn)的是半持續(xù)的連接,也就是只有手機(jī)和CMWAP直接是以socket進(jìn)行連接,所以是持續(xù)的,而CMWAP和服務(wù)器之間使用的是HTTP連接,這個(gè)是每次需要重新建立的。但是HTTP編程最大的延遲來(lái)自于重新建立連接,所以使用該方式傳輸數(shù)據(jù)雖然無(wú)法利用過(guò)多的socket特性,但是可以在節(jié)約費(fèi)用的同時(shí),實(shí)現(xiàn)響應(yīng)速度的提高。 最后補(bǔ)充一點(diǎn),該種技術(shù)只是一種過(guò)渡技術(shù),隨著socket的普及以及費(fèi)用的降低,這種技術(shù)會(huì)被淘汰。更正一點(diǎn),我不是取的網(wǎng)頁(yè),而是在servlet中直接用輸入輸出流來(lái)做的。to mailbomb: 多謝你的用時(shí)回復(fù) 針對(duì)你的第二點(diǎn)說(shuō)明,我做了一個(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ì)斷開(kāi)鏈接。我是通過(guò)發(fā)送拋出異常來(lái)判斷,發(fā)現(xiàn)這個(gè)值是25秒左右。測(cè)試時(shí)間是上午10點(diǎn),而且我覺(jué)得這個(gè)值與各地的網(wǎng)關(guān)類型以及高峰時(shí)段應(yīng)該有關(guān)連,所以只能做為一個(gè)參考值。因此象那種想利用現(xiàn)有連接發(fā)送的數(shù)據(jù)間隔不能太長(zhǎng),否則還是要重連的。 由此看來(lái)這種方式在目前是可行的,不知道3G出來(lái)后,CMCC會(huì)不會(huì)開(kāi)放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ā)送過(guò)去的協(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可以寫(xiě)一個(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é)議部分可以寫(xiě)入實(shí)體數(shù)據(jù)部分即可使用Socket連接穿越CMWAP代理作者:陳躍峰出自:版權(quán)所有,未經(jīng)允許嚴(yán)禁轉(zhuǎn)載! 在J2ME網(wǎng)絡(luò)程序開(kāi)發(fā)過(guò)程中,為了節(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連接來(lái)穿越CMWAP代理。其實(shí)由于CMWAP是一個(gè)標(biāo)準(zhǔn)的HTTP代理服務(wù)器,也就是說(shuō)可以處理任何的基于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)的,所以可以說(shuō)實(shí)現(xiàn)了一部分socket的功能,而服務(wù)器端可以采用已有的HTTP服務(wù)器,從而降低開(kāi)發(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、開(kāi)發(fā)成本和減少開(kāi)發(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("開(kāi)始建立連接!"); /使用代理連接

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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論