服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

cmnet和cmwap网络连接

       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”

 

扫描关注微信公众号