使用Socket連接穿越CMWAP代理
在J2ME網(wǎng)絡(luò )程序開(kāi)發(fā)過(guò)程中,為了節約用戶(hù)支付的網(wǎng)絡(luò )費用,很多J2ME手機網(wǎng)絡(luò )程序都支持CMWAP代理。
本文引用地址:http://dyxdggzs.com/article/149133.htm但是由于CMWAP只是中國移動(dòng)建立的一個(gè)HTTP網(wǎng)絡(luò )服務(wù)器,所以在使用HTTP網(wǎng)絡(luò )編程中,可以很方便的使用。但是在使用socket方法操作時(shí),這個(gè)方式好象就行不通了。
下面就介紹一下如何使用socket連接來(lái)穿越CMWAP代理。其實(shí)由于CMWAP是一個(gè)標準的HTTP代理服務(wù)器,也就是說(shuō)可以處理任何的基于HTTP協(xié)議的轉發(fā)請求,那么就可以使用socket方式編程時(shí)使用HTTP協(xié)議即可了。
實(shí)現原理:使用socket和CMWAP建立連接,然后將網(wǎng)絡(luò )協(xié)議設計成HTTP協(xié)議的格式,這樣CMWAP就可以繼續實(shí)現請求的轉發(fā)了,這就是實(shí)現的基本原理。
當然,由于socket連接方式可以實(shí)現持續連接,這里的持續連接只存在于手機和CMWAP之間,但是可以只建立一次連接就實(shí)現多次的發(fā)送,還是基于請求-響應結構實(shí)現的,所以可以說(shuō)實(shí)現了一部分socket的功能,而服務(wù)器端可以采用已有的HTTP服務(wù)器,從而降低開(kāi)發(fā)成本和時(shí)間。
該技術(shù)的優(yōu)勢主要有以下幾點(diǎn):
u使用CMWAP進(jìn)行數據傳輸,可以為用戶(hù)節約流量費用。
u由于手機和CMWAP之間建立的是持續連接,所以可以提高網(wǎng)絡(luò )響應速度。
u使用該方式,可以實(shí)現服務(wù)器端兼容HTTP連接和socket連接,也就是使用一組服務(wù)器,降低開(kāi)發(fā)成本和減少開(kāi)發(fā)時(shí)間。
實(shí)現網(wǎng)絡(luò )操作的代碼如下所示:
packagecmwaptest;
importjava.io.*;
importjavax.microedition.io.*;
/**
*測試使用socket連接穿越CMWAP服務(wù)器
*/
publicclassCmwapThreadextendsThread{
CmwapFormcf;
publicCmwapThread(CmwapFormcf){
this.cf=cf;
}
publicvoidrun(){
try{
//測試
cf.displayInfo(開(kāi)始建立連接!);
//使用代理連接
SocketConnectionsc=(SocketConnection)Connector.open(socket://10.0.0.172:80);
//測試
cf.displayInfo(連接建立完畢!);
//發(fā)送數據
OutputStreamos=sc.openOutputStream();
StringrequestLine=gethttp://www.freewebs.com/cqucyf/a.htmhttp/1.0rn;
Stringheader=accept:*/*rnrn;
os.write(requestLine.getBytes());
os.write(header.getBytes());
os.flush();
//測試
cf.displayInfo(數據發(fā)送完畢!);
//接收數據
InputStreamis=sc.openInputStream();
byte[]data=newbyte[10240];
intnum=is.read(data);
//測試
cf.displayInfo(數據接受完畢!+數據長(cháng)度為:+num);
//處理數據
cf.doStr(data,num);
sc.close();
}catch(Exceptione){
//e.printStackTrace();
cf.doError(e.toString());
}
}
}
評論