使用Socket连接穿越CMWAP代理
作者:陈跃峰
出自:http://blog.csdn.net/mailbomb
版权所有,未经允许严禁转载!
在J2ME网络程序开发过程中,为了节约用户支付的网络费用,很多J2ME手机网络程序都支持CMWAP代理。
但是由于CMWAP只是中国移动建立的一个HTTP网络服务器,所以在使用HTTP网络编程中,可以很方便的使用。但是在使用socket方法操作时,这个方式好象就行不通了。
下面就介绍一下如何使用socket连接来穿越CMWAP代理。其实由于CMWAP是一个标准的HTTP代理服务器,也就是说可以处理任何的基于HTTP协议的转发请求,那么就可以使用socket方式编程时使用HTTP协议即可了。
实现原理:使用socket和CMWAP建立连接,然后将网络协议设计成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());
}
}
}
分享到:
相关推荐
为了解决这个问题,开发人员通常会使用连接池来管理和复用已建立的Socket连接。 首先,我们来看一下Socket的基本概念。Socket是网络编程中的一个抽象概念,它代表了两台机器间的一个双向通信链路。在Java中,`java...
在本场景中,“Socket连接控制打印机输出”指的是利用Socket连接远程打印机,仅需知道打印机的IP地址,即可实现对打印机的打印控制。这种方式通常适用于局域网或互联网环境中的设备管理,比如远程办公或分布式打印...
3. 归还连接:完成网络操作后,将Socket返回到连接池,而不是关闭它,以便后续再次使用。 4. 检查和维护:定期检查连接池中连接的状态,确保它们的有效性,及时处理无效的Socket。 为了监控和优化线程池的性能,...
在这个“Socket连接-TCP测试”案例中,我们将探讨如何使用Socket进行TCP连接,并通过实际的图片传输来验证连接的有效性。 首先,TCP连接的建立遵循三次握手的原则。客户端首先发送一个SYN(同步序列编号)包给...
Java Socket连接池是一种优化网络通信性能的技术,它允许应用程序复用已经...在设计和使用Socket连接池时,还需要考虑到合理的连接池大小设置、连接的生命周期管理以及异常处理等细节,以确保系统的稳定性和高效性。
本文将深入探讨如何在C#中使用Socket类设置代理,以便进行网络通信。首先,我们需要理解Socket类的基本概念,它是网络编程的基础,允许我们通过TCP或UDP协议与远程服务器进行低级别的交互。 ### Socket类简介 ...
- 建立连接:客户端使用Socket类的connect()方法连接到服务器端的特定端口。 - 数据传输:通过Socket对象的输入/输出流进行数据的发送和接收。 - 关闭连接:完成通信后,双方都会调用Socket的close()方法关闭连接。 ...
在IT领域,网络编程是不可或缺的一部分,而Socket接口是实现跨平台网络通信的主要...通过使用系统提供的API,结合适当的策略和机制,我们可以有效地检测和处理Socket连接的各种状态,从而提升软件的稳定性和用户体验。
2. **Socket编程基础**:在Python中,我们可以使用内置的socket库来创建Socket对象,通过socket对象的bind()方法绑定IP和端口,listen()方法开始监听,accept()方法接收连接请求,recv()和send()方法用于数据的接收...
在Socket客户端连接池中,当我们需要发送数据时,可以从池中获取一个已建立的连接,使用完毕后归还而不是关闭,这样就可以避免频繁地打开和关闭连接,降低了网络延迟,提高了系统响应速度。 实现Socket客户端连接池...
下面是一段示例代码,展示了如何创建和使用Socket连接池: ```csharp // 定义Socket类 public class XieGouSocket { public Socket m_socket; // Socket对象 public bool m_isFree; // 判断是否空闲 public int ...
1. **连接池**:为了提高性能,管理器通常会使用连接池技术,预先创建并保持一定数量的Socket连接,避免每次客户端请求时都需要新建连接的开销。 2. **并发处理**:管理器需要能同时处理多个客户端的连接请求,这...
学习这个框架可以帮助理解如何在实际应用中有效地管理和使用Socket连接,以及如何通过多线程和线程池优化并发性能。通过阅读和分析源码,可以深入理解这些概念,并提升网络编程和并发处理的能力。
### Socket 实现 HTTP 代理服务器的关键知识点 ...综上所述,通过以上知识点的学习和理解,我们能够更好地掌握如何使用 Socket 实现一个基本的 HTTP 代理服务器,并且在这个过程中还需要深入理解 HTTP 协议的工作机制。
在这个"iOS下的Socket连接demo"中,可能使用了第三方库,比如GCDAsyncSocket或CFStream的封装库,这些库简化了Socket连接的创建和管理,提高了代码的可读性和可维护性。 1. **客户端Socket连接**:客户端通常需要...
在Android中,我们通常使用`java.net.Socket`类来创建Socket对象,通过指定打印机的IP地址和端口号建立连接。 2. **IP地址与端口号**: - IP地址是网络设备的唯一标识,用于区分网络上的不同设备。在本案例中,...
提供一个c# socket连接池设计的例子,解决socket并发连接限制的问题,并且提供一种设置连接超时时间的方法,默认连接超时时间是不能设置的,提供了socket网络发送数据的接口.可用于pos小票打印机通讯。
在这个"python使用socket连接小程序"中,我们可能涉及到的知识点包括: 1. **socket模块介绍**:socket是Python中的标准库,用于处理网络通信。它基于Berkeley Socket接口,允许程序作为网络服务端(服务器)或者...
首先,需要创建一个Socket对象,并使用Connect方法连接到目标服务器。然后,使用Send方法发送HTTP/HTTPS请求,最后使用Receive方法接收服务器的响应。 sendsRequestRetry方法 在提供的代码中,sendsRequestRetry...
在我们的Socket线程连接池实例中,`GenericObjectPool`被用来管理Socket对象,确保它们在使用后可以被正确地回收和重用,减少创建和销毁Socket的开销。 **实例详解**: 1. **创建Socket对象**:首先,我们需要定义...