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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、在J2ME網絡程序開發(fā)過程中,為了節(jié)約用戶支付的網絡費用,很多J2ME手機網絡程序都支持CMWAP代理。但是由于CMWAP只是中國移動建立的一個HTTP網絡服務器,所以在使用HTTP網絡編程中,可以很方便的使用。但是在使用socket方法操作時,這個方式好象就行不通了。下面就介紹一下如何使用socket連接來穿越CMWAP代理。其實由于CMWAP是一個標準的HTTP代理服務器,也就是說可以處理任何的基于HTTP協(xié)議的轉發(fā)請求,那么就可以使用socket方式編程時使用HTTP協(xié)議即可了。實現(xiàn)原理:使用socket和CMWAP建立連接,然后將網絡協(xié)議設計成HTTP協(xié)議的格式,這樣CMWAP就可以繼

2、續(xù)實現(xiàn)請求的轉發(fā)了,這就是實現(xiàn)的基本原理。當然,由于socket連接方式可以實現(xiàn)持續(xù)連接,這里的持續(xù)連接只存在于手機和CMWAP之間,但是可以只建立一次連接就實現(xiàn)多次的發(fā)送,還是基于請求-響應結構實現(xiàn)的,所以可以說實現(xiàn)了一部分socket的功能,而服務器端可以采用已有的HTTP服務器,從而降低開發(fā)成本和時間。該技術的優(yōu)勢主要有以下幾點:u       使用CMWAP進行數(shù)據(jù)傳輸,可以為用戶節(jié)約流量費用。u       由于手機和CMWAP之間建立的是持續(xù)連接,所以可以提高網絡

3、響應速度。u       使用該方式,可以實現(xiàn)服務器端兼容HTTP連接和socket連接,也就是使用一組服務器,降低開發(fā)成本和減少開發(fā)時間。實現(xiàn)網絡操作的代碼如下所示:package cmwaptest;import java.io.*;import javax.microedition.io.*;/* * 測試使用socket連接穿越CMWAP服務器 */public class CmwapThread extends Thread CmwapForm cf; public CmwapThread(CmwapForm cf) thi

4、s.cf = cf;   public void run() try /測試 cf.displayInfo("開始建立連接!"); /使用代理連接 SocketConnection sc = (SocketConnection)Connector.open("socket:/72:80");  /測試 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();  /測試 cf.displayInfo("數(shù)據(jù)發(fā)送完畢!");  /接收數(shù)據(jù) InputStream is = sc.openInputStream(); byte data = new byte10240; int num = is.read(data); /測試 cf

6、.displayInfo("數(shù)據(jù)接受完畢!" + "數(shù)據(jù)長度為:"+ num); /處理數(shù)據(jù) cf.doStr(data,num);  sc.close(); catch(Exception e) /e.printStackTrace(); cf.doError(e.toString(); 請問一下你的實測結果如何? 我的實測環(huán)境是:服務器采用tomcat+servlet,手機是motorola e398,實測結果如下: 1、關于第一點,如果用HttpConnection的GET方式收只有一個字符a的網頁流量是1101,SocketConnec

7、tion是929,我想這是HttpConnection底層實現(xiàn)添加了一些http頭的原因。 2、關于第二點,wap網關會自動添加“connection: close”,如果是http服務器,也會相應返回這個標志并關閉鏈接(這點在rfc2616中也有說明)。所以說想持續(xù)連接是不太可能的,如果自己寫一個服務器來解析HTTP,忽略這個標志會如何,這些我就沒有試了。:)to alien75 : 首先感謝你的實際測試。 關于你提到的問題,解釋如下: 1、關于這個流量問題,你可以控制客戶端以及服務器端的頭信息數(shù)量來達到控制流量的目的,而且CMWAP的收費可以包月,這個是CMNET無法比擬的。 2、通過這種

8、方式實現(xiàn)的是半持續(xù)的連接,也就是只有手機和CMWAP直接是以socket進行連接,所以是持續(xù)的,而CMWAP和服務器之間使用的是HTTP連接,這個是每次需要重新建立的。但是HTTP編程最大的延遲來自于重新建立連接,所以使用該方式傳輸數(shù)據(jù)雖然無法利用過多的socket特性,但是可以在節(jié)約費用的同時,實現(xiàn)響應速度的提高。 最后補充一點,該種技術只是一種過渡技術,隨著socket的普及以及費用的降低,這種技術會被淘汰。更正一點,我不是取的網頁,而是在servlet中直接用輸入輸出流來做的。to mailbomb: 多謝你的用時回復 針對你的第二點說明,我做了一個簡單測試。還是相同的測試環(huán)境和測試數(shù)據(jù)

9、,做了兩種測試。結果如下: 1、檢測數(shù)據(jù)負載效率。每隔5秒發(fā)一個請求,20次后流量是11852。如果是HTTP方式,每一次事務請求從發(fā)起到完成都要大概1K吧。 2、檢測手機多長時間不發(fā)數(shù)據(jù)WAP網關會斷開鏈接。我是通過發(fā)送拋出異常來判斷,發(fā)現(xiàn)這個值是25秒左右。測試時間是上午10點,而且我覺得這個值與各地的網關類型以及高峰時段應該有關連,所以只能做為一個參考值。因此象那種想利用現(xiàn)有連接發(fā)送的數(shù)據(jù)間隔不能太長,否則還是要重連的。 由此看來這種方式在目前是可行的,不知道3G出來后,CMCC會不會開放SOCKET? 在此再惡一把CMCC,就咱中國還分個什么CMNET和CMWAP,也算是中國特色吧。

10、_/使用代理連接 SocketConnection sc = (SocketConnection)Connector.open("socket:/72:80"); 之后,如何連接到我的url服務器? 返回的消息是不是可以保證完整性?to orient : 其實CMWAP是一個HTTP代理服務器,所以你的URL地址包含在發(fā)送過去的協(xié)議數(shù)據(jù)中,如代碼: String requestLine = "get http/1.0rn" 這里是發(fā)送到的地址非常感激你的回復。 因為我要模仿cmnet連接,那么協(xié)議數(shù)據(jù)中每次都有URL地址,同時我的消息(b

11、yte 形式)也放在里邊么? 代理服務器(cmwap)如何轉發(fā)我的消息(byte 形式)到我的指定服務器。 因為你的String requestLine = "get http/1.0rn" 是get連接方式么。 如果方便,請你留下MSN。我的是jadyorient可以寫一個post 連接的例子么。 呵 URL: static final String HOST = "03" static final int TCP_PORT = 9002; 我登陸平臺時 發(fā)送消息 : 其中類型(short),賬號(short),密碼3項(st

12、ring)。 服務器返回消息: 其中類型(short),ok (byte)。 手機6600。to orient : 只需要做如下更改即可: String requestLine = "post 03:9002 http/1.0rn" 你的協(xié)議部分可以寫入實體數(shù)據(jù)部分即可使用Socket連接穿越CMWAP代理作者:陳躍峰出自:版權所有,未經允許嚴禁轉載! 在J2ME網絡程序開發(fā)過程中,為了節(jié)約用戶支付的網絡費用,很多J2ME手機網絡程序都支持CMWAP代理。但是由于CMWAP只是中國移動建立的一個HTTP網絡服務器,所以在使用H

13、TTP網絡編程中,可以很方便的使用。但是在使用socket方法操作時,這個方式好象就行不通了。下面就介紹一下如何使用socket連接來穿越CMWAP代理。其實由于CMWAP是一個標準的HTTP代理服務器,也就是說可以處理任何的基于HTTP協(xié)議的轉發(fā)請求,那么就可以使用socket方式編程時使用HTTP協(xié)議即可了。實現(xiàn)原理:使用socket和CMWAP建立連接,然后將網絡協(xié)議設計成HTTP協(xié)議的格式,這樣CMWAP就可以繼續(xù)實現(xiàn)請求的轉發(fā)了,這就是實現(xiàn)的基本原理。當然,由于socket連接方式可以實現(xiàn)持續(xù)連接,這里的持續(xù)連接只存在于手機和CMWAP之間,但是可以只建立一次連接就實現(xiàn)多次的發(fā)送,還

14、是基于請求-響應結構實現(xiàn)的,所以可以說實現(xiàn)了一部分socket的功能,而服務器端可以采用已有的HTTP服務器,從而降低開發(fā)成本和時間。該技術的優(yōu)勢主要有以下幾點:u       使用CMWAP進行數(shù)據(jù)傳輸,可以為用戶節(jié)約流量費用。u       由于手機和CMWAP之間建立的是持續(xù)連接,所以可以提高網絡響應速度。u       使用該方式,可以實現(xiàn)服務器端兼容HTTP連接和socket連接,也就是使用一組服務器,降低

15、開發(fā)成本和減少開發(fā)時間。實現(xiàn)網絡操作的代碼如下所示:package cmwaptest;import java.io.*;import javax.microedition.io.*;/* * 測試使用socket連接穿越CMWAP服務器 */public class CmwapThread extends Thread CmwapForm cf; public CmwapThread(CmwapForm cf) this.cf = cf;   public void run() try /測試 cf.displayInfo("開始建立連接!"); /使用代理連接

16、 SocketConnection sc = (SocketConnection)Connector.open("socket:/72:80");  /測試 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();  /測試 cf.displayInfo("數(shù)據(jù)發(fā)送完畢!");  /接收數(shù)據(jù) InputStre

溫馨提示

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

評論

0/150

提交評論