`

J2ME使用Socket通过cmwap接入点访问安全HTTPS 2【转】

阅读更多

新建一个Midp应用程序,在startApp中加入以下代码:


      1 SocketConnection conn = null;
  2 OutputStream os = null;
  3 InputStream is = null;
  4 try {
  5 // url: https://ebs.95559.com.cn/corporbank/es_logon.jsp
  6 conn = (SocketConnection) Connector.open("socket://10.0.0.172:80", Connector.READ_WRITE, true);
  7 conn.setSocketOption(SocketConnection.DELAY, 0);
  8 conn.setSocketOption(SocketConnection.KEEPALIVE, 300);
  9
  10 // 发送和回复的请求
  11 os = conn.openDataOutputStream();
  12 is = conn.openDataInputStream();
  13
  14 // 在此我们使用HTTP 1.0,HTTP 1.1自己还需要处理chunk,比较麻烦
  15 String reqStr =
  16 "GET https://ebs.95559.com.cn/corporbank/es_logon.jsp HTTP/1.0\r\n" +
  17 "Host: ebs.95559.com.cn:443\r\n" +
  18 "User-Agent: FelixBrowser\r\n" +
  19 "Accept-Charset: utf-8;\r\n" +
  20 "Connection: close;\r\n" +
  21 "Accept-Language: zh-cn\r\n\r\n";
  22
  23 os.write(reqStr.getBytes());
  24 os.flush();
  25
  26 System.out.println("Response Stream:");
  27 byte[] buf = new byte[128];
  28 while (true) {
  29 int availSize = is.read(buf, 0, buf.length);
  30 if (availSize == -1) {
  31 break;
  32 }
  33 System.out.println(new String(buf, 0, availSize));
  34 }
  35 } catch (Exception ex) {
  36 ex.printStackTrace();
  37 } finally {
  38 if (is != null) {
  39 try {
  40 is.close();
  41 } catch (IOException ex) {
  42 ex.printStackTrace();
  43 }
  44 }
  45
  46 if (os != null) {
  47 try {
  48 os.close();
  49 } catch (IOException ex) {
  50 ex.printStackTrace();
  51 }
  52 }
  53
  54 if (conn != null) {
  55 try {
  56 conn.close();
  57 } catch (IOException ex) {
  58 ex.printStackTrace();
  59 }
  60 }
  61 }
  62

  输出结果:

  image

  OK,这就是我们想要的结果。

  封装并重构

  平时我们用习惯了HttpConnection,对于使用SocketConnection访问HTTP来说,太多的设置和属性拼凑给编码带来了不少麻烦。在完善J2ME-XHTML浏览器时,我将Socket访问HTTP这一块代码封装成一个类SocketHttpConnection,此类继承自HttpConnection,实现了接口方法。

  并且,我还构建了一个工厂类,可以通过枚举的方式创建SocketHttpConnection和纯HttpConnection,有工厂创建的类还可以制定是以代理的方式连接还是直连。在此,我将代码贡献出来给大家。下载地址:这里。

  几个类之间的关系如下:

  无标题

  使用方法很简单:

 


 1 // 请求地址
  2 String url = "https://ebs.95559.com.cn/corporbank/es_logon.jsp";
  3
  4 // 连接方式:SocketConnection/HttpConnection
  5 byte connType = HttpConnectionFactory.CONNTYPE_SOCKET_HTTP;
  6
  7 // 是否使用代理及代理地址、端口
  8 boolean isUseProxy = true;
  9 String proxyHost = "10.0.0.172";
  10 int proxyPort = 80;
  11
  12 HttpConnection conn = null;
  13 InputStream is = null;
  14 try {
  15 // 调用工厂创建
  16 conn = HttpConnectionFactory.getConnection(url, connType, isUseProxy, proxyHost, proxyPort);
  17
  18 // 像原生HttpConnection一样使用
  19 int code = conn.getResponseCode();
  20 System.out.println("Response Code: " + code);
  21
  22 is = conn.openDataInputStream();
  23
  24 System.out.println("Response Stream:");
  25 byte[] buf = new byte[128];
  26 while (true) {
  27 int availSize = is.read(buf, 0, buf.length);
  28 System.out.println(new String(buf, 0, availSize));
  29
  30 if (availSize < buf.length) {
  31 break;
  32 }
  33 }
  34 } catch (IOException ex) {
  35 ex.printStackTrace();
  36 }
  37
分享到:
评论

相关推荐

    j2me socket 框架连接的例子

    使用Socket的一个好处是可以避免为每个网络请求建立单独的Connection。并且因为socket的inputStream, outputStream是双工的方式工作,所以可以连续的发送网络请求而不必等待网络回应。 原文发布在:...

    j2me_https.rar_ j2me-https_j2me_j2me htt_j2me htt_j2me https

    压缩包中的"在J2ME中使用Socket通过cmwap接入点访问安全HTTPS.pdf"文档很可能提供了一个详细的步骤指南,涵盖了以上所述的各个方面。它可能包括了代码示例、配置步骤和可能遇到的问题及其解决方案。对于想要在J2ME...

    j2me socket编程

    本文将深入探讨 J2ME 中的 Socket 编程及其相关知识点。 ### 1. J2ME 的 Socket API J2ME 提供了 `javax.microedition.io.Connector` 类来创建和管理 Socket 连接。`Connector` 类提供了静态方法 `newSocket()`,...

    J2ME的Socket编程

    在 J2ME 中进行 Socket 编程是实现设备间网络通信的基础,允许应用程序通过 TCP/IP 协议发送和接收数据。下面将详细探讨 J2ME 中的 Socket 编程知识点。 1. **Socket 概念**: - Socket 是网络通信中的一个端点,...

    j2me自动连接网络,可以是cmwap或者cmnet

    在这个场景中,我们关注的是J2ME如何实现自动连接到互联网,无论是通过CMWAP还是CMNET这两种常见的GPRS(General Packet Radio Service)接入点。 CMWAP和CMNET是中国移动提供的两种不同的网络接入方式。CMWAP主要...

    J2ME 的socket通信源码

    J2ME 的socket通信源码,经过本人的整理能真正运行的源码

    j2me socket 图片上传

    在IT行业中,J2ME(Java 2 Micro Edition)是一种专为嵌入式设备和移动设备设计的Java平台。它提供了轻量级的框架来开发应用程序,尤其在早期的智能...通过熟练掌握这些知识点,开发者能够构建可靠的J2ME图片上传功能。

    j2me socket方式下载图片

    在Java 2 Micro Edition (J2ME)平台上,Socket通信是一种基础的网络连接方式,用于设备间的数据传输。本主题将深入探讨如何使用J2ME的Socket接口来实现图片的下载功能。首先,我们需要理解Socket的基本概念。 ...

    基于j2me的socket网络聊天室

    这是基于j2me的socket网络聊天室的详细代码

    j2me socket 服务端与 客户端聊天

    在 J2ME 中,Socket 编程是实现客户端-服务器通信的一种常见方式,它允许应用程序通过网络发送和接收数据。本项目 "j2me socket 服务端与 客户端聊天" 展示了如何利用 Socket 技术创建一个简单的聊天应用,使手机...

    Http.rar_C http_http请求_j2me socket cmnet_s40 cmnet socket_visual

    在J2ME中,可以使用`java.net.Socket`类创建一个套接字,与服务器建立连接,并通过输入输出流进行数据的读写。对于HTTP请求,通常先建立Socket连接,然后发送HTTP头和请求体,最后接收服务器响应。 描述中提到的...

    J2ME API 2.0 J2ME使用手册 J2ME帮助文档

    **J2ME API 2.0 - J2ME使用手册 - J2ME帮助文档** Java 2 Micro Edition(J2ME)是Java平台的一个子集,专为资源有限的设备如移动电话、智能手表和家用电器等设计。J2ME API 2.0 提供了在这些小型设备上开发应用...

    论文研究-基于J2ME的Socket网络通信加密技术研究 .pdf

    基于J2ME的Socket网络通信加密技术研究,张宇敏,杨杰,随着3G技术的高速发展,手机上网已经成为一种时尚,使用手机上网的人逐渐增多,而手机网络安全问题也随之而来,自然手机通信的安�

    J2me存储和连接详解

    J2ME(Java 2 Micro Edition)作为Java平台的一个分支,专为资源受限的设备(如早期的移动电话和PDA)设计,提供了MIDP(Mobile Information Device Profile)等配置文件,允许开发者在这些设备上开发和部署应用程序...

    j2me客户服务 基于socket + mysql驱动

    本文将深入探讨如何使用J2ME构建基于Socket通信的客户服务系统,并结合MySQL数据库驱动进行数据存储和检索。 首先,让我们了解J2ME的基础。J2ME由一组配置和 profiles 组成,如MIDP(Mobile Information Device ...

    郭克华J2ME实例教程完整版之Socket编程

    在安全方面,教程也将触及SSL/TLS(Secure Sockets Layer/Transport Layer Security)的使用,以保护通过Socket传输的数据不被窃取或篡改。这在当今隐私和安全问题日益突出的时代尤其重要。 最后,郭克华老师还会...

    最简单J2ME与J2SE的SOCKET链接例子,一看就懂

    J2ME通常用于移动设备和嵌入式系统,它的网络支持相对较弱,但依然可以使用javax.microedition.io.Connector类来创建SOCKET连接。以下是一个简单的J2ME客户端示例: ```java import javax.microedition.io....

    J2ME 使用环境配置

    **J2ME 使用环境配置详解** Java 2 Micro Edition(J2ME)是Java平台的一个重要组成部分,主要用于开发和运行移动设备、嵌入式设备以及消费电子产品的应用程序。本篇文章将详细阐述如何配置J2ME的开发环境,以便...

Global site tag (gtag.js) - Google Analytics