关于CNNet,cnwap j2me联网实践。

 

在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","*/*"); 

  }

 

然后在去进行解析页面。。。。。

你可能感兴趣的:(关于CNNet,cnwap j2me联网实践。)