`

j2me联网时候对于代理问题可能会出现的错误【转】

阅读更多

众所周知,CMWAP是一个网关,同时又是一个代理服务器,我们只知道

J2ME这样写是没有问题的

假设我请求的地址是http://www.uc.cn/a.do?url=http://www.iteye.com

 

Java代码 复制代码
  1. httpConn = (HttpConnection) Connector.open(Common.stringAppend("http://10.0.0.172   
  2. a.do?url=http://www.iteye.com", 3, true);   
  3.            if (aProxy != null) {   
  4.                 httpConn.setRequestProperty("X-Online-Host", "www.uc.cn);   
  5.             }  
httpConn = (HttpConnection) Connector.open(Common.stringAppend("http://10.0.0.172
/a.do?url=http://www.iteye.com", 3, true);
            if (aProxy != null) {
                httpConn.setRequestProperty("X-Online-Host", "www.uc.cn);
            }

 

 

这样写,对于WTK,Nokia S40的处理机制。他们转换成Soket后是这么写的

 

Java代码 复制代码
  1. SocketConnection socket =   
  2.                                  (SocketConnection) javax.microedition.io.Connector.open("socket://10.0.0.172:80");   
  3.                              OutputStream os = socket.openOutputStream();   
  4.                              os.write(toByte("GET /a.do?url=http://www.iteye.com HTTP/1.1\r\n"));                  
  5.                                                        os.write(toByte("Host: 10.0.0.172\r\n"));   
  6.                                                            os.write(toByte("X-Online-Host: www.uc.cn\r\n\r\n"));  
SocketConnection socket =
        (SocketConnection) javax.microedition.io.Connector.open("socket://10.0.0.172:80");
       OutputStream os = socket.openOutputStream();
       os.write(toByte("GET /a.do?url=http://www.iteye.com HTTP/1.1\r\n"));               
                                                      os.write(toByte("Host: 10.0.0.172\r\n"));
                                                          os.write(toByte("X-Online-Host: www.uc.cn\r\n\r\n"));

网关对上面写法的处理并不能达到你的期望。

 

对于Socket层来说,我们应该处理成一个标准的代理方式,只有这样,才能达到我们期望的结果。

 

Java代码 复制代码
  1. SocketConnection socket =   
  2.                                  (SocketConnection) javax.microedition.io.Connector.open("socket://10.0.0.172:80");   
  3.                              OutputStream os = socket.openOutputStream();   
  4.                              os.write(toByte("GET http://10.0.0.172/a.do?url=http://www.iteye.com HTTP/1.1\r\n"));   
  5.   
  6.                                                            
  7.   
  8.                                                            os.write(toByte("Host: 10.0.0.172\r\n"));   
  9.                                                            os.write(toByte("X-Online-Host: www.uc.cn\r\n\r\n"));  
SocketConnection socket =
        (SocketConnection) javax.microedition.io.Connector.open("socket://10.0.0.172:80");
       OutputStream os = socket.openOutputStream();
       os.write(toByte("GET http://10.0.0.172/a.do?url=http://www.iteye.com HTTP/1.1\r\n"));

                                                        

                                                          os.write(toByte("Host: 10.0.0.172\r\n"));
                                                          os.write(toByte("X-Online-Host: www.uc.cn\r\n\r\n"));

这样写,就能达到我们想要的结果,而且这也是代理服务器的标准写法。

 

从上面的一些数据分析,我猜想移动网关的处理方式是:
我们以http://10.0.0.172/a.do?url=http://www.uc.cn/ 的方式进行处理
处理步骤
1. 获取host字段,J2ME的HttpConnection send header是host: 10.0.0.172,
   那么移动先分析此字段。
  
2. 如果Host字段是10.0.0.172, 那么会去查找X-Online-Host字段,并且代理发送的时候把Host植替换成X-Online-Host的植,
   如果非10.0.0.172,则直接走HTTP标准的代理方式。

3. 如果Host字段是10.0.0.172, CMWAP还会分析URI(/a.do?url=http://www.uc.cn/)。如果你的URI里面带有http://关键字的话
   那么问题就会出现了,它会认为http://是host具备的字段,因此它会分析http://www.uc.cn并且把host后面的字符传当成URI。
   最终导致了你请求以http://10.0.0.172/a.do?url=http://www.uc.cn/ 变成了请求以http://10.0.0.172/了,服务一般会return
   500 内部错误。

具体大家可以编写想过的代码试试

 

分享到:
评论

相关推荐

    J2ME联网不同运营商网络方案

    【J2ME联网不同运营商网络方案】 在移动应用开发领域,J2ME(Java Micro Edition)扮演了重要的角色,尤其在网络通信方面。随着3G网络的普及,中国移动、联通、电信三大运营商为J2ME应用提供了丰富的网络环境。本文...

    J2ME通用进度条,解决联网、线程操作等候问题

    在Java 2 Micro Edition (J2ME)平台上开发应用程序时,常常会遇到用户需要等待联网操作或线程执行完毕的情况,比如数据下载、文件上传等。这种情况下,为用户提供一个可视化的进度条能够显著提高用户体验,让用户...

    j2me框架_用J2ME的通用联网框架开发联网.pdf

    在J2ME中,联网功能对于创建能够与服务器进行交互的应用程序至关重要。本文将详细介绍如何使用J2ME的通用联网框架来开发联网应用。 首先,MIDP(Mobile Information Device Profile)是J2ME的一个子集,它定义了...

    J2ME相关技术,介绍J2ME的问题处理

    3. 异常处理:学会如何捕获和处理程序运行时可能出现的错误。 4. 多线程:理解线程的概念,知道如何创建和管理并发执行的任务。 然而,J2ME不涉及J2SE中的某些特性,如JDK命令行工具、AWT和Swing图形库,因为它们在...

    J2ME开发 J2ME开发 J2ME开发

    在J2ME开发中,开发者通常会使用集成开发环境(IDE),如NetBeans、Eclipse或JBuilder,这些工具提供了代码编辑、调试和打包应用的功能。编写完代码后,需要通过模拟器或实际设备进行测试。 "J2ME开发.pdf"可能包含...

    j2me手机基于服务器的网络象棋游戏源代码

    【J2ME手机基于服务器的网络象棋游戏源代码】是一种专门为移动设备设计的网络棋类游戏实现,它利用Java 2 Micro Edition (J2ME) 技术,让玩家能够在手机上与其他在线用户对战。J2ME是Java平台的一个轻量级版本,主要...

    J2ME中文版教程 J2ME教程

    9. **问题排查与优化**:对于开发者来说,解决问题和优化代码是必不可少的技能。教程会提供一些常见错误的解决方案,并分享性能优化的技巧。 10. **进阶话题**:除了基础内容,教程可能还会涉及KVM(Java Virtual ...

    j2me经典游戏源码

    10. **错误处理和调试**:源码将展示如何在J2ME环境中处理异常和进行调试,这对于任何开发者都是宝贵的实践经验。 通过研究这个"j2me经典游戏源码",你可以深入了解J2ME的编程模型,掌握在有限资源设备上构建可扩展...

    J2ME弱联网

    **J2ME弱联网开发详解** 在移动通信领域,Java Micro Edition(J2ME)曾是为小型设备,如手机,提供应用程序开发的主要平台。在那个时代,由于网络条件限制,弱联网技术对于实现有限的网络功能至关重要。本文将深入...

    j2me开发框架介绍

    随着 j2me 的普及,出现了许多开源框架,旨在简化开发过程,提高开发效率。下面将介绍这些框架,並分析它们的特点和功能。 1. EasyMF 简易 J2ME 开发框架 EasyMF 是一个 J2ME 开发框架,目标是设计一个简单、稳定...

    j2me_plane.rar_j2me_j2me 飞机_j2me 飞机 游戏_飞机游戏

    对于初学者而言,这是一个很好的实践项目,不仅可以学习到基础的J2ME知识,还能锻炼编程思维和解决问题的能力。而"j2me_plane.rar"中的源代码正是这样一个实例,值得下载研究,以加深对J2ME游戏开发的理解。

    一些实用的j2me模板程序

    音乐的控制,rms的操作类,java字符串解析 将字符串解析成字符数组,java进度条实例模板,j2me中将对象转换成字节数组的方法,j2me联网测试,j2me多线程的应用实例,j2me Socket通信例子 客户端,服务器端

    j2me不能调试问题已解决

    然而,在使用 Eclipse 这样的集成开发环境(IDE)进行 J2ME 应用开发的过程中,开发者可能会遇到无法调试的问题。本文将详细介绍如何解决 J2ME 在 Eclipse 中无法调试的问题,并提供一系列实用的操作步骤。 #### 二...

    j2me移植Android引擎

    8. **性能优化**:Android设备性能各异,移植时需注意内存管理和性能优化,避免在Android上出现J2ME中的性能问题。 9. **中间件引擎**:如描述中的“实现J2ME接口的游戏引擎”,可能是为了简化移植过程,通过这样的...

    j2me源码——蓝牙联网实现五子棋

    对于蓝牙联网五子棋,我们可能需要用到 MIDP(Mobile Information Device Profile)配置和 CLDC(Connected Limited Device Configuration)配置,这两个是J2ME中最常见的组合,用于开发具有用户界面和网络连接功能...

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

    "midpng-javadoc-final"这个文件名可能指的是MIDP PNG图像处理相关的API文档,对于理解如何在J2ME环境中处理图像和图形操作至关重要。通过深入学习和实践,开发者能够熟练掌握J2ME API,构建出高效且用户体验良好的...

    快速转化J2ME程序为Android程序

    《快速转化J2ME程序为Android程序》 随着Android智能手机的普及,许多开发者面临的问题是如何将原有...然而,开发者仍需对J2ME和Android平台的差异有所了解,以便更好地适应Android环境,并处理可能遇到的兼容性问题。

    J2ME 发短信 源码

    5. **错误处理**:在发送过程中可能出现各种错误,如网络问题、权限问题等,需要捕获并处理这些异常。 在WTK(Wireless Toolkit)环境下,开发者可以使用内置的模拟器来测试短信发送功能,而在Myeclipse中,...

    J2ME教材:J2ME&Gaming中文版

    **J2ME教材:J2ME&Gaming中文版** J2ME,全称为Java 2 Micro Edition,是Java平台的一个子集,主要用于嵌入式设备和移动设备,如手机、智能手表等。这个“J2ME&Gaming中文版”教材主要针对的是Java在游戏开发领域的...

    j2me游戏.rar

    "j2me游戏.rar"很可能是包含了一系列使用J2ME技术开发的游戏资源包。在本文中,我们将深入探讨J2ME游戏开发的关键知识点。 一、J2ME概述 J2ME由Java ME规范定义,它提供了多种配置和框架,如MIDP(Mobile ...

Global site tag (gtag.js) - Google Analytics