CMNET和CMWAP网络连接
2004-11-18 00:24
429 查看
J2me上的GPRS网络接入点有两个,一个就是CMNET,一个就是CMWAP。一般移动梦网,百宝箱就是挂在CMWAP上的。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
/***************************************************************************
* 下载网络文件
* @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()后,就表明连接上了,只要连接上后,数据的下载是比较快的(也就是说网络连接是最慢的)。
解决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”
2004-11-18
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
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”
2004-11-18
相关文章推荐
- ATL实现Connection Point的一种简单的方法
- 今天很高兴!
- 如何用VB获得机器的MAC地址
- PHP 的 MySQL 操作类,跟手册上的函数一样用,但是更方便了。多说无益,看了就知道了。
- Java测试规范(引用)
- oracle中的分页
- IP地址的隐藏(delphi实现 )
- 路由器网络接口解析
- 转载:易水寒写的自由网,走向free的极限
- 将某一主机域名解析为IP地址
- JCreator Pro 3.0与WTK2.0配置心得
- 力争最简单把*、&说清楚
- Java日记(1) 一. 认识Java
- 一个画图类,类似ms_chart的线图,适用于科学仿真数据分析(一)
- Internet 怎么了?
- 紧急求教
- 怎样为任何控件和区域添加提示信息:用自己封装的CTip类
- 从注册表中还原MSNMessenger口令
- 《书评《自适应软件开发》(二)--.com时代的遗物
- IP地址的分类及范围详解:A、B、C、D、E五类是如何划分的?