關於CNNet,cnwap j2me連網實踐。

來源:互聯網
上載者:User

 

在j2medev上見到一篇關於CMNET和CMWAP網路連接。   現在我根據我的實際經驗總結下它們。
1。CNNET,這個就不用怎麼樣介紹了,跟電腦上Internet沒什麼區別。
直接用這個這樣的代碼就Ok了

java 代碼 
  1. try {  
  2.              http = (HttpConnection) Connector.open(url);  
  3.         } catch (IOException e) {  
  4.            
  5.             e.printStackTrace();  
  6. }  

 

2。CNWAP,這個我的實踐結果根網上的很多介紹不同。看下面這段文字。下面摘自。在J2ME中使用CNWAP存取點連網

都是中國移動搞出來的事情。所以對於特定的一些機型,普通的直接連網方式會出現連不上網路,這是因為你的手機裝置不支援CNNET的連網方式。也許你會發現不經過修改,直接連接的方式也可以在一些cnwap的裝置上(只支援cnwap的多為低端機)運行,這個是因為裝置上應中國一定的要求,在系統底層進行了轉換,如果沒有轉換的話,就必須你自己手動在代碼裡面顯式的來轉換了。 這裡我只打算給出一些示意代碼,用來輔助說明解決問題的方法 假設你原來要請求的頁面是:htpp://www.testwap.com/test/try.jsp那麼你會用這句話串連HttpConnection httpConnection = (HttpConnection)Connector.open(“http://www.testwap.com/test/try.jsp”); 但是為了轉成CNWAP的連網形式 你必須這麼寫HttpConnection httpConnection = (HttpConnection)Connector.open(“http://10.0.0.172:80/test/try.jsp”);接著再寫httpConnection.setRequestProperty("X-Online-Hostwww.testwap.com");
httpConnection.setRequestProperty("Accept","*/*"); 這樣就ok了 不過這個方法在模擬器上沒辦法測試,因為模擬器移動網關不讓你進啊,所以寫代碼的時候用cnnet的正式發布的時候改成cnwap的。很麻煩
代碼是

java 代碼 
  1. http =(HttpConnection)Connector.open("http://10.0.0.172:80/"+url,Connector.READ,true);  
  2.   
  3.      c.setRequestProperty("X-Online-Host",ServerName);  
  4.   
  5.      c.setRequestProperty("Accept", "*/*");  
上面的代碼CNNET我試過,因為我那個足球項目需要採用Scoket,確實是只有CNNet能開啟Socket。
第二種,我卻意外發現,我開發WapExporer進行測試的時候,我沒有採用代理,也可以擷取串連。
分析有以下幾種可能。
1.移動那邊可能對於CNNET來說,幾乎是對所有的協議進行開放。比如(Socket,Http)跟所有連接埠。
2.對於CNWAP,我估計只開放http協議以及80連接埠,其他的都封閉,也就是CNWAP只能訪問http協議。
   由於我測試的IP地址進行測試,所以它可以直接找到。對於非IP地址我沒測試果。也許CNWAP不能解釋網域名稱也說不定,這點我就不清楚了。真機測試連網時候,會有移動的資費頁面提示,這就需要進行二次連網。自中國移動啟動上網資費頁面提醒後,導致了很多的J2ME連網出現了聯不上伺服器的問題。即在j2me程式中啟動連網後,在有些地區,有些時候,移動網關會把我們的請求截下,返還一個資費提醒的頁面給我們,這樣我們的伺服器將不會收到我們的請求,導致程式出現連網失敗的錯誤。

  因此我們在處理網路連接時要加入對移動資費頁面的處理,我們可以在發送網路請求後,對返回的response進行http頭的檢測,如果我們檢測到返回的content-type是text/vnd.wap.wml,我們可以扔掉這個response,重新發起一次請求就可以解決資費頁面的問題,或者我們也可以提取出資費頁面裡面的請求地址,再次發送一次請求。

  處理的代碼如下:

HttpConnection httpConnection = (HttpConnection)Connector.open(“http://10.0.0.172:80/test/try.jsp”);httpConnection.setRequestProperty("X-Online-Hostwww.testwap.com");
httpConnection.setRequestProperty("Accept","*/*"); String s=httpConnection.getHeaderField("Content-Type");

  if(s.equals("text/vnd.wap.wml")){

  //重新發起一次請求

  

 httpConnection = (HttpConnection)Connector.open(“http://10.0.0.172:80/test/try.jsp”); httpConnection.setRequestProperty("X-Online-Hostwww.testwap.com");
httpConnection.setRequestProperty("Accept","*/*"); 

  }

 

然後在去進行解析頁面。。。。。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.