- 浏览: 626033 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (448)
- 字符串相关 (16)
- Struts2页面显示 (15)
- Hibernate错误记录 (6)
- linux命令 (2)
- java项目测试 (5)
- 个人作品 (10)
- hibernate应用 (15)
- struts1 (7)
- 数据库(除了hibernate) (42)
- J2ME/WAP (37)
- servlet/jsp (49)
- java桌面应用+java综合 (14)
- 服务器配置,报错解决 (24)
- Myeclipse配置,抛错解决 (8)
- linux (18)
- JavaScript+jquery+ajax (45)
- div css 页面设计 (16)
- 互联网综合运营 (14)
- 编程工具类 (3)
- 论文 报告 文献 (14)
- PHP (26)
- struts2 (9)
- spring (1)
- 我的IT生活 (14)
- Resin (6)
- java项目记录 (14)
- https安全 (11)
- 支付技术 (3)
最新评论
-
yihaijunyxr:
很好呀,我好久没用iteye了,今天找出两个帐号(yihaij ...
c/c++的监听tmlisten启动缓慢解决 -
yihaijun:
好像这不算是技术博客,是工作博客
c/c++的监听tmlisten启动缓慢解决 -
ml365:
后来还优化了webservice的前置框架,不用cxf,用了另 ...
c/c++的监听tmlisten启动缓慢解决 -
Jayliuying:
有点晚哈 但是也支持一下 楼主
java相关论文的参考文献【转】 -
gqsunrise:
...
我是项目经理,我的项目管理日记【20120229】
所涉及的知识点:
1、如何使用J2ME连接cmwap代理
2、基于安全套接字的HTTPS
尝试方法一:
新建一个Midlet应用程序,在StartApp方法中加入如下代码:
1 HttpConnection conn = null; 2 InputStream is = null; 3 try { 4 // url: https://ebs.95559.com.cn/corporbank/es_logon.jsp 5 conn = (HttpConnection) Connector.open("http://10.0.0.172:80/corporbank/es_logon.jsp", Connector.READ, true); 6 String host = "ebs.95559.com.cn"; 7 conn.setRequestProperty("x-online-host", host); 8 conn.setRequestMethod(HttpConnection.GET); 9 10 int code = conn.getResponseCode(); 11 System.out.println("Response Code: " + code); 12 13 is = conn.openDataInputStream(); 14 15 System.out.println("Response Stream:"); 16 byte[] buf = new byte[128]; 17 while (true) { 18 int availSize = is.read(buf, 0, buf.length); 19 if (availSize == -1) { 20 break; 21 } 22 System.out.println(new String(buf, 0, availSize)); 23 } 24 } catch (Exception ex) { 25 ex.printStackTrace(); 26 } finally { 27 if (is != null) { 28 try { 29 is.close(); 30 } catch (IOException ex) { 31 ex.printStackTrace(); 32 } 33 } 34 35 if (conn != null) { 36 try { 37 conn.close(); 38 } catch (IOException ex) { 39 ex.printStackTrace(); 40 } 41 } 42 } 43 |
此代码的作用是:使用cmwap代理,请求我们制定的页面,并在控制台中输出返回的状态码及内容。很显然,这是一种普通的cmwap连接方式,并没有考虑https因素的加入,输出的结果也在意料之内:
Response Code: 502 Response Stream: <?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml><card> <p><do type="prev" name="Back" label="Back"><prev/></do>Connection to host failed. Check your settings and try again. If the pro blem persists contact your operator.</p></card></wml> |
原因分析:我们要请求的是安全HTTP,端口443,而在我们的代码中并没有体现出我们要连接HTTPS的意图,我们只是告诉了cmwap代理我们要连接地址“ebs.95559.com.cn/corporbank/es_logon.jsp”,而并没有告诉cmwap代理我们所要访问的地址是基于HTTPS的,所以cmwap代理会按照地址“http://ebs.95559.com.cn/corporbank/es_logon.jsp”去连接,恰好这个地址是不支持HTTP:80的,cmwap代理返回了网关错误。
尝试方法二:
针对以上设想,我们将代码修改一下,想方设法让cmwap代理知道我们要访问的目标地址属于HTTPS:443。
修改程序的第6行,使其变成:
String host = "ebs.95559.com.cn:443"; |
运行,控制台还是输出了以下错误:
Response Code: 500 Response Stream: <?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml><card> <p><do type="prev" name="Back" label="Back"><prev/></do>Your request for a service could not be fulfilled. Please try again or c ontact your operator if the problem persists. </p></card></wml> |
原因分析:不详。
尝试方法三:
以上两种方法都行不通,有没有可能cmwap代理服务器开通了SSL端口,来让应用程序通过此端口来访问HTTPS呢?
将代码第5行修改如下:
conn = (HttpConnection) Connector.open("https://10.0.0.172:443/corporbank/es_logon.jsp", Connector.READ, true); |
模拟器长时间没有响应。
原因分析:一般手机自带的浏览器都支持访问HTTPS,而手机设置的cmwap代理地址都是10.0.0.172:80。所以可以肯定的是手机是可以通过10.0.0.172:80这个代理访问HTTPS而并不是10.0.0.172:443。上网查了资料,证明移动针对cmwap代理只开通了80 端口,而并没有开通443端口。
尝试方法四(成功):
经过了以上三次失败,我不得不好好静下心来想想解决方法。我想到了使用OTA的方式,让PC连接到GPRS上进行调试。首先使用数据线连接电脑和手机,将电脑的本地连接禁用,把手机当猫用,创建基于手机拨号的网络连接,输入号码“*99#”,拨号,连接。给浏览器设置好代理 10.0.0.172:80后,能够正常浏览HTTPS地址。我忽然想到,既然HttpConnection不能够正常通过cmwap连接HTTPS,那我使用Socket模拟HTTP请求能成功吗?带着这个疑问,我开始进行准备:
必备工具:
Wireshark或HttpWatch或Openware Simulator
最开始我是使用Firefox+Wireshark拦截80端口的包的,但是浏览器向服务器发出SSL Hello后传输的内容都会被加密,Wireshark所看到的都是密文,相当的不方便。如图:
后来我发现,Openware Simulator提供浏览器,且本身就提供了类似于Wireshark的功能,而且可以截获到HTTP层所传输的内容,能够很清楚的看见客户端与服务器端来往的过程。所以,我们以Openware Simulator的截图作为说明。Openware Simulator下载地址:这里(免费,需要邮件注册)
还可以使用HttpWatch 6.0,新版HttpWatch已经可以作为Firefox的扩展嵌入。不过这个要收大洋,还是Openware Simulator来得直接一些。
实现方法:
打开Openwave V7 Simulator,在模拟器地址栏输入网址,截图如下:
通过右边的控制台输出窗口,我们可以很清楚的看到Openware Simulator通过向cmwap代理所发出的请求格式。并且,通过Socket连接,是不需要添加“x-online-host”请求头的。
既然HttpConnection行不通,我们自己就使用Socket实现Http连接,向cmwap代理发出请求。
此处要先说明以下两点:
1、J2ME中的SocketConnection是MIDP 2.0的可选包,并不是每个手机都提供Socket的支持;
2、我们必须使用Socket连接cmwap代理10.0.0.172:80,而MIDP 2.0对Socket访问80端口加了限制,在真机上使用必须得使用证书签署生成的JAD,否则会抛出安全异常。
在此我不按照Openware Simulator控制台中显示的连接顺序(先Connect后Get)进行连接,使用Openware Simulator只是证明我想法的可行性,我将直接使用Get+完整URL的方式进行代码的编写。
发表评论
-
什么是WAP网关?
2011-10-17 17:09 10151. 什么是WAP网关? WA ... -
判断用户通过手机访问wap还是电脑直接访问
2011-10-17 16:29 1989首先说最根本的解决 ... -
wap的全面解析!!
2011-10-17 16:29 18121. 开发WAP软件需要哪 ... -
j2me library failed to get library information[转]
2010-12-11 21:59 1163出現過類似問題,我是每次都用的run as...->ru ... -
j2me联网时候对于代理问题可能会出现的错误【转】
2010-12-11 11:30 775众所周知,CMWAP是一个网关,同时又是一个代理服务器,我 ... -
在无线J2ME设备上实现超文本传输协议【转】
2010-12-11 11:27 758随着越来越多手提电 ... -
J2ME使用Socket通过cmwap接入点访问安全HTTPS 2【转】
2010-12-11 11:26 1260新建一个Midp应用程序,在startApp中加入以下代码: ... -
J2ME无线联网技术中的HTTP连接[转]
2010-12-11 11:24 861import java.io.ByteArrayOutputS ... -
wml教程 中文手册
2010-12-11 01:02 903http://www.g168.net/txt/wml/ ... -
j2me结合j2ee实现用户登陆功能-2【转】
2010-12-11 00:41 948服务器代码:LoginServlet:package co ... -
j2me结合j2ee实现用户登陆功能【转】
2010-12-11 00:40 847手机客户端代码:LoginForm:package com ... -
独立WAP交友网站趋势分析
2010-12-10 19:28 975从互联网开始,交友网 ... -
什么是WAP?wap技术简介(转)
2010-12-10 19:25 974程序员都在讨论Wireless(无线)技术,也就是常说到的WA ... -
j2me游戏开发:控制飞机移动(转)
2010-12-10 19:01 9121. 飞机plane是一个标准的plane。由三桢画面组成,: ... -
j2me游戏开发:工具类的完善(转)
2010-12-10 19:00 934虽然我们有了midp2.0的支持,但是有时还是需要一些辅助工具 ... -
J2ME程序教程,程序+讲解,很好的入门教程(转载) 【2】
2010-12-10 18:59 723J2ME RPG游戏边学边做(二) 1、public vo ... -
J2ME程序教程,程序+讲解,很好的入门教程(转载) 【1】
2010-12-10 18:58 1120J2ME RPG游戏边学边做(一) 笔者以前是做j2ee的 ... -
J2ME内存优化(转载)
2010-12-10 18:58 873Out momory 一阵天旋地转 ... -
PngMate使用教程2(转)
2010-12-10 18:57 863下面我们来换一张图片,街头霸王Ken,这张gif的帧数比较多, ... -
PngMate使用教程1(转)
2010-12-10 18:56 1311PngMate使用教程 JAVA手机网[www.cnjm.n ...
相关推荐
使用Socket的一个好处是可以避免为每个网络请求建立单独的Connection。并且因为socket的inputStream, outputStream是双工的方式工作,所以可以连续的发送网络请求而不必等待网络回应。 原文发布在:...
压缩包中的"在J2ME中使用Socket通过cmwap接入点访问安全HTTPS.pdf"文档很可能提供了一个详细的步骤指南,涵盖了以上所述的各个方面。它可能包括了代码示例、配置步骤和可能遇到的问题及其解决方案。对于想要在J2ME...
本文将深入探讨 J2ME 中的 Socket 编程及其相关知识点。 ### 1. J2ME 的 Socket API J2ME 提供了 `javax.microedition.io.Connector` 类来创建和管理 Socket 连接。`Connector` 类提供了静态方法 `newSocket()`,...
在 J2ME 中进行 Socket 编程是实现设备间网络通信的基础,允许应用程序通过 TCP/IP 协议发送和接收数据。下面将详细探讨 J2ME 中的 Socket 编程知识点。 1. **Socket 概念**: - Socket 是网络通信中的一个端点,...
在这个场景中,我们关注的是J2ME如何实现自动连接到互联网,无论是通过CMWAP还是CMNET这两种常见的GPRS(General Packet Radio Service)接入点。 CMWAP和CMNET是中国移动提供的两种不同的网络接入方式。CMWAP主要...
J2ME 的socket通信源码,经过本人的整理能真正运行的源码
在IT行业中,J2ME(Java 2 Micro Edition)是一种专为嵌入式设备和移动设备设计的Java平台。它提供了轻量级的框架来开发应用程序,尤其在早期的智能...通过熟练掌握这些知识点,开发者能够构建可靠的J2ME图片上传功能。
本主题将深入探讨如何使用J2ME的Socket接口来实现图片的下载功能。首先,我们需要理解Socket的基本概念。 Socket是TCP/IP协议的一部分,它提供了一种在两个网络应用程序之间建立连接并进行双向数据传输的方法。在...
这是基于j2me的socket网络聊天室的详细代码
在 J2ME 中,Socket 编程是实现客户端-服务器通信的一种常见方式,它允许应用程序通过网络发送和接收数据。本项目 "j2me socket 服务端与 客户端聊天" 展示了如何利用 Socket 技术创建一个简单的聊天应用,使手机...
在J2ME中,可以使用`java.net.Socket`类创建一个套接字,与服务器建立连接,并通过输入输出流进行数据的读写。对于HTTP请求,通常先建立Socket连接,然后发送HTTP头和请求体,最后接收服务器响应。 描述中提到的...
**J2ME API 2.0 - J2ME使用手册 - J2ME帮助文档** Java 2 Micro Edition(J2ME)是Java平台的一个子集,专为资源有限的设备如移动电话、智能手表和家用电器等设计。J2ME API 2.0 提供了在这些小型设备上开发应用...
基于J2ME的Socket网络通信加密技术研究,张宇敏,杨杰,随着3G技术的高速发展,手机上网已经成为一种时尚,使用手机上网的人逐渐增多,而手机网络安全问题也随之而来,自然手机通信的安�
记录ID是一个整数,从1开始递增,一旦某个记录被删除,其ID将不再被重复使用。 **记录存储的特点:** - **记录存储的命名规则**:记录存储通过名称来标识,名称最多可以包含32个字符,且区分大小写。在同一个...
本文将深入探讨如何使用J2ME构建基于Socket通信的客户服务系统,并结合MySQL数据库驱动进行数据存储和检索。 首先,让我们了解J2ME的基础。J2ME由一组配置和 profiles 组成,如MIDP(Mobile Information Device ...
在安全方面,教程也将触及SSL/TLS(Secure Sockets Layer/Transport Layer Security)的使用,以保护通过Socket传输的数据不被窃取或篡改。这在当今隐私和安全问题日益突出的时代尤其重要。 最后,郭克华老师还会...
**J2ME 使用环境配置详解** Java 2 Micro Edition(J2ME)是Java平台的一个重要组成部分,主要用于开发和运行移动设备、嵌入式设备以及消费电子产品的应用程序。本篇文章将详细阐述如何配置J2ME的开发环境,以便...
J2ME通常用于移动设备和嵌入式系统,它的网络支持相对较弱,但依然可以使用javax.microedition.io.Connector类来创建SOCKET连接。以下是一个简单的J2ME客户端示例: ```java import javax.microedition.io....