冰浪

          哥已不再年輕 - 堅定夢想,畢生追求!
          posts - 85, comments - 90, trackbacks - 0, articles - 3
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          CMNET和CMWAP網絡連接

          Posted on 2009-04-09 09:11 冰浪 閱讀(219) 評論(0)  編輯  收藏 所屬分類: 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”

          (注:轉于http://blog.csdn.net/tangl_99/archive/2004/11/18/185086.aspx

          主站蜘蛛池模板: 婺源县| 井陉县| 韶山市| 壤塘县| 南江县| 普兰县| 大同县| 通化县| 上犹县| 义马市| 巩义市| 离岛区| 彭州市| 大厂| 桃园市| 平谷区| 兴安县| 修水县| 英超| 焦作市| 收藏| 绥中县| 万山特区| 堆龙德庆县| 海阳市| 定边县| 安国市| 濮阳县| 得荣县| 思茅市| 娄烦县| 肥乡县| 汽车| 阿克苏市| 锦州市| 阿合奇县| 清涧县| 资溪县| 和林格尔县| 高密市| 南开区|