程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> CMNET和CMWAP網絡連接

CMNET和CMWAP網絡連接

編輯:J2ME
 J2ME上的GPRS網絡接入點有兩個,一個就是CMNET,一個就是CMWAP。一般移動夢網,百寶箱就是掛在CMWAP上的。

 

CMNET

CMNET就是一般的互聯網的網絡接入點。我們一般在SUN那裡看到的J2ME實例代碼都是基於CMNET接入點的網絡下載。一般來說,CMNET可以連接所有的網絡站點。下面就是我在開發仙劍的CMNET的下載資源包的代碼片斷。

   /***************************************************************************

   * 下載網絡文件

   * @param url String 要下載的文件的地址URL

   * @return byte[] 如果下載成功,返回文件的字節緩沖;

   *             如果下載失敗,返回null

   */

  public byte[] download_CMNET(String url) {

    ContentConnection c;

    InputStream is = null;

    byte[] data = null;

    try {

       c= (ContentConnection)Connector.open("http://"+ServerName+"/"+url,Connector.READ,true);

       is = c.openInputStream();

       int dataLength = (int) c.getLength();

       if (dataLength == -1) {

         ByteArrayOutputStream bStrm = new ByteArrayOutputStream();

         int ch;

         while ( (ch = is.read()) != -1)

           bStrm.write(ch);

         data = bStrm.toByteArray();

         bStrm.close();

       }

       else {

         data = new byte[dataLength];

         Data_Read_Buf(is,data,0,dataLength);

       }

       is.close();

       c.close();

    }catch (Exception e) {

      data = null;

    }

    c= null;

    return data;

  }

 

代碼很普通,不過需要注意的有以下兩點。

1.       getLength()並不是一定都有效,比如我發現在Nokia 40的手機上這個函數有效,但是在Nokia 60的手機上,這個函數通常都無效。所以我們通常都必須要有另外一個下載方式,既是從while循環不斷從輸入流中一個一個讀byte,如果讀出為-1,則表示輸入流數據讀完。

2.       Connector.open最後一個參數是表示是否允許timeout,通常我們都得設置true,因為GPRS網路經常中斷,那麼必須有個timeout來退出連接。依照我的經驗,一般如果能夠執行完c.openInputStream()後,就表明連接上了,只要連接上後,數據的下載是比較快的(也就是說網絡連接是最慢的)。

 

CMWAP

       MOTO的手機通常都是默認接入點就是CMWAP。在手機上的“網頁“->”網頁設定”中可以設置默認的接入點。一般中國大陸的出產的MOTO手機都是設置的”移動夢網”的網絡接入點,起始就是CMWAP接入點。而MOTO最可惡的一點就是一旦默認接入點是CMWAP,那麼所有的J2ME應用程序都無法訪問CMNET。而Nokia 40雖然默認的接入點是CMWAP,但是運行中可以自動檢查CMNET來訪問CMNET。

       解決MOTO的網絡連接有兩個辦法:

1.       在”網頁“->”網頁設定”中新建一個網頁,然後不需要填寫任何參數,設置成默認後,它就可以讓手機上J2ME程序通過CMNET訪問網絡了。

2.       通過移動的代理來實現通過CMWAP訪問互聯網。下面是仙劍中使用CMWAP下載資源包的代碼片斷:

/***************************************************************************

 * 下載網絡文件

 * @param url String 要下載的文件的地址URL

 * @return byte[] 如果下載成功,返回文件的字節緩沖;

 *             如果下載失敗,返回null

 */

 public byte[] download_CMWAP(String url) {

  HttpConnection c;

  InputStream is = null;

  byte[] data = null;

  try {

     c= (HttpConnection)Connector.open("http://10.0.0.172:80/"+url,Connector.READ,true);

     c.setRequestProperty("X-Online-Host",ServerName);

     c.setRequestProperty("Accept", "*/*");

     is = c.openInputStream();

     int dataLength = (int) c.getLength();

     if (dataLength == -1) {

       ByteArrayOutputStream bStrm = new ByteArrayOutputStream();

       int ch;

       while ( (ch = is.read()) != -1)

         bStrm.write(ch);

       data = bStrm.toByteArray();

       bStrm.close();

     }

     else {

       data = new byte[dataLength];

       Data_Read_Buf(is,data,0,dataLength);

     }

     is.close();

     c.close();

  }catch (Exception e) {

    data = null;

  }

  c= null;

  return data;

 }

比如我們要下載

http://xxx.xxx.xxx.xxx/BB/AA.dat,那麼上面的ServerName= ”xxx.xxx.xxx.xxx”, 而url = ”BB/AA.dat”

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved