日期:2014-05-20  浏览次数:20740 次

J2ME如何通过cmwap直接访问互连网

1、 移动网关的作用
a)移动网关的主要作用是提高访问速度。因为客户请求的数据存于代理服务器的硬盘中,因此下次这个客户或其它客户再请求相同目的站点的数据时,就能直接从代理服务器的硬盘中读取,代理服务器起到了缓存的作用,但缓存却给开发人员造成障碍,如cookie缓存问题等。
b)获取手机用户数据,如手机号码等

在中国,中国移动为了一些特殊的需要,开发手机软件时需设置网关代理,这样却给开发带来不便。

2、J2me如何跨过网关
在J2ME网络编程中,一般需要设置CMWAP代理的方式连接网络,连接的代码和直接连接有所不同,下面是示例:
例如你需要访问的地址为:

http://www.test.com/login/loginServlet 

HttpConnection http = (HttpConnection)Connector.open("http://10.0.0.172:80/login/loginServlet"); 

http.setRequestProperty("X-Online-Host","www.test.com"); 

?

这种做法容易和手机的APN产生冲突,当用户不清楚cmwap或cmnet的连接方式时,会造成连网失败等问题,影响用户体验。更方便的方法可以用

?

HttpConnection http = (HttpConnection)Connector.open(("http://www.test.com/login/loginServlet");

?

这样方式(直接方式),实际手机能自动为程序设置代理,我们无需做更复杂地处理。

注:有些手机确实需要像例子那样设置。
????? 已在6120C,E71,P1C,7500手机测试通过。

?

导读
手机中的重定向问题及处理 http://fonter.iteye.com/blog/400836
J2ME开发中由WAP网关带来的cookie问题 http://fonter.iteye.com/blog/399105
安装JAD时提示JAD无效原因之一 http://fonter.iteye.com/blog/400888
J2ME网络交互之优化 http://fonter.iteye.com/blog/405137
解决Eclipse无法调试J2ME程序的配置方法 http://fonter.iteye.com/blog/405697

J2ME模拟器加载RMS时突然失效的原因 http://fonter.iteye.com/blog/407576

J2ME飞信协议分析(初稿) http://fonter.iteye.com/blog/408385

1 楼 cqllang 2009-06-11  
10.0.0.172
这个是移动的网关IP吧?
2 楼 fonter 2009-06-12  
cqllang 写道

10.0.0.172 这个是移动的网关IP吧?

嗯,是的
3 楼 CoxZhang 2009-06-16  
CMWAP方式可以写成那样,CMNET必须要先连移动的网关吧?
4 楼 fonter 2009-06-16  
CoxZhang 写道

CMWAP方式可以写成那样,CMNET必须要先连移动的网关吧?

我目前都是写成这样的HttpConnection http = (HttpConnection)Connector.open(("http://www.test.com/login/loginServlet"); 用CMWAP可以联上网
5 楼 hemin108 2009-07-06  
想问下 怎么取得访问的地址返回的数据呢··
例如我要查询一个号码的归属地,怎么取得返回后的信息呢···?
6 楼 fonter 2009-07-06  
hemin108 写道
想问下 怎么取得访问的地址返回的数据呢··
例如我要查询一个号码的归属地,怎么取得返回后的信息呢···?

用HTTP请求时,一般通过POST或GET的方式向服务端请求数据,服务端得到请求后会向客户返回相应的信息,可用InputStream和OutputStream 读取流和写入流!即是你向OutputStream写入号码,再从InputStream读取返回信息。