`

使用Socket连接穿越CMWAP代理

阅读更多

使用Socket连接穿越CMWAP代理

作者:陈跃峰

出自:http://blog.csdn.net/mailbomb

版权所有,未经允许严禁转载!

J2ME网络程序开发过程中,为了节约用户支付的网络费用,很多J2ME手机网络程序都支持CMWAP代理。

但是由于CMWAP只是中国移动建立的一个HTTP网络服务器,所以在使用HTTP网络编程中,可以很方便的使用。但是在使用socket方法操作时,这个方式好象就行不通了。

下面就介绍一下如何使用socket连接来穿越CMWAP代理。其实由于CMWAP是一个标准的HTTP代理服务器,也就是说可以处理任何的基于HTTP协议的转发请求,那么就可以使用socket方式编程时使用HTTP协议即可了。

实现原理:使用socketCMWAP建立连接,然后将网络协议设计成HTTP协议的格式,这样CMWAP就可以继续实现请求的转发了,这就是实现的基本原理。

当然,由于socket连接方式可以实现持续连接,这里的持续连接只存在于手机和CMWAP之间,但是可以只建立一次连接就实现多次的发送,还是基于请求-响应结构实现的,所以可以说实现了一部分socket的功能,而服务器端可以采用已有的HTTP服务器,从而降低开发成本和时间。

该技术的优势主要有以下几点:

u 使用CMWAP进行数据传输,可以为用户节约流量费用。

u 由于手机和CMWAP之间建立的是持续连接,所以可以提高网络响应速度。

u 使用该方式,可以实现服务器端兼容HTTP连接和socket连接,也就是使用一组服务器,降低开发成本和减少开发时间。

实现网络操作的代码如下所示:

package cmwaptest;

import java.io.*;

import javax.microedition.io.*;

/**

* 测试使用socket连接穿越CMWAP服务器

*/

public class CmwapThread extends Thread{

CmwapForm cf;

public CmwapThread(CmwapForm cf){

this.cf = cf;

}

public void run(){

try{

//测试

cf.displayInfo("开始建立连接!");

//使用代理连接

SocketConnection sc = (SocketConnection)Connector.open("socket://10.0.0.172:80");

//测试

cf.displayInfo("连接建立完毕!");

//发送数据

OutputStream os = sc.openOutputStream();

String requestLine = "get http://www.freewebs.com/cqucyf/a.htm http/1.0\r\n";

String header = "accept:*/*\r\n\r\n";

os.write(requestLine.getBytes());

os.write(header.getBytes());

os.flush();

//测试

cf.displayInfo("数据发送完毕!");

//接收数据

InputStream is = sc.openInputStream();

byte[] data = new byte[10240];

int num = is.read(data);

//测试

cf.displayInfo("数据接受完毕!" + "数据长度为:"+ num);

//处理数据

cf.doStr(data,num);

sc.close();

}catch(Exception e){

//e.printStackTrace();

cf.doError(e.toString());

}

}

}

分享到:
评论

相关推荐

    java socket连接池 实现

    为了解决这个问题,开发人员通常会使用连接池来管理和复用已建立的Socket连接。 首先,我们来看一下Socket的基本概念。Socket是网络编程中的一个抽象概念,它代表了两台机器间的一个双向通信链路。在Java中,`java...

    Socket连接控制打印机输出

    在本场景中,“Socket连接控制打印机输出”指的是利用Socket连接远程打印机,仅需知道打印机的IP地址,即可实现对打印机的打印控制。这种方式通常适用于局域网或互联网环境中的设备管理,比如远程办公或分布式打印...

    C# Socket连接池

    3. 归还连接:完成网络操作后,将Socket返回到连接池,而不是关闭它,以便后续再次使用。 4. 检查和维护:定期检查连接池中连接的状态,确保它们的有效性,及时处理无效的Socket。 为了监控和优化线程池的性能,...

    Socket连接-TCP测试

    在这个“Socket连接-TCP测试”案例中,我们将探讨如何使用Socket进行TCP连接,并通过实际的图片传输来验证连接的有效性。 首先,TCP连接的建立遵循三次握手的原则。客户端首先发送一个SYN(同步序列编号)包给...

    java socket连接池

    Java Socket连接池是一种优化网络通信性能的技术,它允许应用程序复用已经...在设计和使用Socket连接池时,还需要考虑到合理的连接池大小设置、连接的生命周期管理以及异常处理等细节,以确保系统的稳定性和高效性。

    c# socket设置代理

    本文将深入探讨如何在C#中使用Socket类设置代理,以便进行网络通信。首先,我们需要理解Socket类的基本概念,它是网络编程的基础,允许我们通过TCP或UDP协议与远程服务器进行低级别的交互。 ### Socket类简介 ...

    Java实现Socket长连接和短连接

    - 建立连接:客户端使用Socket类的connect()方法连接到服务器端的特定端口。 - 数据传输:通过Socket对象的输入/输出流进行数据的发送和接收。 - 关闭连接:完成通信后,双方都会调用Socket的close()方法关闭连接。 ...

    Linux或Windows下判断socket连接状态

    在IT领域,网络编程是不可或缺的一部分,而Socket接口是实现跨平台网络通信的主要...通过使用系统提供的API,结合适当的策略和机制,我们可以有效地检测和处理Socket连接的各种状态,从而提升软件的稳定性和用户体验。

    使用socket实现的请求代理

    2. **Socket编程基础**:在Python中,我们可以使用内置的socket库来创建Socket对象,通过socket对象的bind()方法绑定IP和端口,listen()方法开始监听,accept()方法接收连接请求,recv()和send()方法用于数据的接收...

    socket 客户端连接池实现

    在Socket客户端连接池中,当我们需要发送数据时,可以从池中获取一个已建立的连接,使用完毕后归还而不是关闭,这样就可以避免频繁地打开和关闭连接,降低了网络延迟,提高了系统响应速度。 实现Socket客户端连接池...

    Socket连接池的简单应用

    下面是一段示例代码,展示了如何创建和使用Socket连接池: ```csharp // 定义Socket类 public class XieGouSocket { public Socket m_socket; // Socket对象 public bool m_isFree; // 判断是否空闲 public int ...

    一个Socket连接管理器

    1. **连接池**:为了提高性能,管理器通常会使用连接池技术,预先创建并保持一定数量的Socket连接,避免每次客户端请求时都需要新建连接的开销。 2. **并发处理**:管理器需要能同时处理多个客户端的连接请求,这...

    socket短连接和长连接 多线程的应用

    学习这个框架可以帮助理解如何在实际应用中有效地管理和使用Socket连接,以及如何通过多线程和线程池优化并发性能。通过阅读和分析源码,可以深入理解这些概念,并提升网络编程和并发处理的能力。

    socket实现HTTP代理服务器

    ### Socket 实现 HTTP 代理服务器的关键知识点 ...综上所述,通过以上知识点的学习和理解,我们能够更好地掌握如何使用 Socket 实现一个基本的 HTTP 代理服务器,并且在这个过程中还需要深入理解 HTTP 协议的工作机制。

    iOS下的Socket连接demo

    在这个"iOS下的Socket连接demo"中,可能使用了第三方库,比如GCDAsyncSocket或CFStream的封装库,这些库简化了Socket连接的创建和管理,提高了代码的可读性和可维护性。 1. **客户端Socket连接**:客户端通常需要...

    android中网口打印机的Socket连接和打印测试数据

    在Android中,我们通常使用`java.net.Socket`类来创建Socket对象,通过指定打印机的IP地址和端口号建立连接。 2. **IP地址与端口号**: - IP地址是网络设备的唯一标识,用于区分网络上的不同设备。在本案例中,...

    c#socket连接池和连接超时时间设置

    提供一个c# socket连接池设计的例子,解决socket并发连接限制的问题,并且提供一种设置连接超时时间的方法,默认连接超时时间是不能设置的,提供了socket网络发送数据的接口.可用于pos小票打印机通讯。

    python使用socket连接小程序

    在这个"python使用socket连接小程序"中,我们可能涉及到的知识点包括: 1. **socket模块介绍**:socket是Python中的标准库,用于处理网络通信。它基于Berkeley Socket接口,允许程序作为网络服务端(服务器)或者...

    c#使用Socket发送HTTP/HTTPS请求的实现代码

    首先,需要创建一个Socket对象,并使用Connect方法连接到目标服务器。然后,使用Send方法发送HTTP/HTTPS请求,最后使用Receive方法接收服务器的响应。 sendsRequestRetry方法 在提供的代码中,sendsRequestRetry...

    socket线程连接池实例

    在我们的Socket线程连接池实例中,`GenericObjectPool`被用来管理Socket对象,确保它们在使用后可以被正确地回收和重用,减少创建和销毁Socket的开销。 **实例详解**: 1. **创建Socket对象**:首先,我们需要定义...

Global site tag (gtag.js) - Google Analytics