收藏 分享(赏)

使用socket连接穿越cmwap代理直联.doc

上传人:cjc2202537 文档编号:1517168 上传时间:2018-07-24 格式:DOC 页数:6 大小:96.50KB
下载 相关 举报
使用socket连接穿越cmwap代理直联.doc_第1页
第1页 / 共6页
使用socket连接穿越cmwap代理直联.doc_第2页
第2页 / 共6页
使用socket连接穿越cmwap代理直联.doc_第3页
第3页 / 共6页
使用socket连接穿越cmwap代理直联.doc_第4页
第4页 / 共6页
使用socket连接穿越cmwap代理直联.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、在 J2ME 网络程序开发过程中,为了节约用户支付的网络费用,很多 J2ME 手机网络程序都支持 CMWAP 代理。但是由于 CMWAP 只是中国移动建立的一个 HTTP 网络服务器,所以在使用 HTTP 网络编程中,可以很方便的使用。但是在使用 socket 方法操作时,这个方式好象就行不通了。下面就介绍一下如何使用 socket 连接来穿越 CMWAP 代理。其实由于CMWAP 是一个标准的 HTTP 代理服务器,也就是说可以处理任何的基于HTTP 协议的转发请求,那么就可以使用 socket 方式编程时使用 HTTP 协议即可了。实现原理:使用 socket 和 CMWAP 建立连接,然

2、后将网络协议设计成HTTP 协议的格式,这样 CMWAP 就可以继续实现请求的转发了,这就是实现的基本原理。当然,由于 socket 连接方式可以实现持续连接,这里的持续连接只存在于手机和 CMWAP 之间,但是可以只建立一次连接就实现多次的发送,还是基于请求-响应结构实现的,所以可以说实现了一部分 socket 的功能,而服务器端可以采用已有的 HTTP 服务器,从而降低开发成本和时间。该技术的优势主要有以下几点: 使用 CMWAP 进行数据传输,可以为用户节约流量费用。 由于手机和 CMWAP 之间建立的是持续连接,所以可以提高网络响应速度。 使用该方式,可以实现服务器端兼容 HTTP连接

3、和 socket 连接,也就是使用一组服务器,降低开发成本和减少开发时间。实现网络操作的代码如下所示:package cmwaptest;import java.io.*;import javax.microedition.io.*;/* 测试使用 socket 连接穿越 CMWAP 服务器*/public class CmwapThread extends ThreadCmwapForm cf;public CmwapThread(CmwapForm cf)this.cf = cf;public void run()try/测试cf.displayInfo(“开始建立连接!“);/使用代理连

4、接SocketConnection sc = (SocketConnection)Connector.open(“socket:/10.0.0.172:80“);/测试cf.displayInfo(“连接建立完毕!“);/发送数据OutputStream os = sc.openOutputStream();String requestLine = “get http:/ http/1.0rn“;String header = “accept:*/*rnrn“;os.write(requestLine.getBytes();os.write(header.getBytes();os.flush

5、();/测试cf.displayInfo(“数据发送完毕!“);/接收数据InputStream is = sc.openInputStream();byte data = new byte10240;int num = is.read(data);/测试cf.displayInfo(“数据接受完毕!“ + “数据长度为:“+ num);/处理数据cf.doStr(data,num);sc.close();catch(Exception e)/e.printStackTrace();cf.doError(e.toString();请问一下你的实测结果如何? 我的实测环境是:服务器采用 tomc

6、at+servlet,手机是 motorola e398,实测结果如下: 1、关于第一点,如果用 HttpConnection 的 GET 方式收只有一个字符 a的网页流量是1101,SocketConnection 是 929,我想这是 HttpConnection 底层实现添加了一些 http头的原因。 2、关于第二点,wap 网关会自动添加 “connection: close”,如果是 http 服务器,也会相应返回这个标志并关闭链接(这点在 rfc2616 中也有说明)。所以说想持续连接是不太可能的,如果自己写一个服务器来解析 HTTP,忽略这个标志会如何,这些我就没有试了。: )t

7、o alien75 : 首先感谢你的实际测试。 关于你提到的问题,解释如下: 1、关于这个流量问题,你可以控制客户端以及服务器端的头信息数量来达到控制流量的目的,而且 CMWAP 的收费可以包月,这个是 CMNET 无法比拟的。 2、通过这种方式实现的是半持续的连接,也就是只有手机和 CMWAP 直接是以 socket 进行连接,所以是持续的,而 CMWAP 和服务器之间使用的是 HTTP 连接,这个是每次需要重新建立的。但是 HTTP 编程最大的延迟来自于重新建立连接,所以使用该方式传输数据虽然无法利用过多的 socket 特性,但是可以在节约费用的同时,实现响应速度的提高。 最后补充一点,

8、该种技术只是一种过渡技术,随着 socket 的普及以及费用的降低,这种技术会被淘汰。更正一点,我不是取的网页,而是在 servlet 中直接用输入输出流来做的。to mailbomb: 多谢你的用时回复 针对你的第二点说明,我做了一个简单测试。还是相同的测试环境和测试数据,做了两种测试。结果如下: 1、检测数据负载效率。每隔 5 秒发一个请求,20 次后流量是 11852。如果是 HTTP 方式,每一次事务请求从发起到完成都要大概 1K 吧。 2、检测手机多长时间不发数据 WAP 网关会断开链接。我是通过发送抛出异常来判断,发现这个值是 25 秒左右。测试时间是上午 10 点,而且我觉得这个

9、值与各地的网关类型以及高峰时段应该有关连,所以只能做为一个参考值。因此象那种想利用现有连接发送的数据间隔不能太长,否则还是要重连的。 由此看来这种方式在目前是可行的,不知道 3G 出来后,CMCC 会不会开放 SOCKET? 在此再恶一把 CMCC,就咱中国还分个什么 CMNET 和 CMWAP,也算是中国特色吧。 _/使用代理连接 SocketConnection sc = (SocketConnection)Connector.open(“socket:/10.0.0.172:80“); 之后,如何连接到我的 url 服务器? 返回的消息是不是可以保证完整性?to orient : 其实

10、CMWAP 是一个 HTTP 代理服务器,所以你的 URL 地址包含在发送过去的协议数据中,如代码: String requestLine = “get http:/ http/1.0rn“; 这里是发送到的地址非常感激你的回复。 因为我要模仿 cmnet 连接,那么协议数据中每次都有 URL 地址,同时我的消息(byte 形式)也放在里边么? 代理服务器(cmwap)如何转发我的消息( byte 形式)到我的指定服务器。 因为你的 String requestLine = “get http:/ http/1.0rn“; 是 get 连接方式么。 如果方便,请你留下 MSN。我的是 可以写一

11、个 post 连接的例子么。 呵 URL: static final String HOST = “201.106.107.103“; static final int TCP_PORT = 9002; 我登陆平台时 发送消息 : 其中类型(short),账号(short),密码 3 项(string )。 服务器返回消息: 其中类型(short),ok (byte )。 手机 6600。to orient : 只需要做如下更改即可: String requestLine = “post http:/201.106.107.103:9002 http/1.0rn“; 你的协议部分可以写入实体数

12、据部分即可使用 Socket 连接穿越 CMWAP 代理作者:陈跃峰出自: http:/ J2ME 网络程序开发过程中,为了节约用户支付的网络费用,很多 J2ME手机网络程序都支持 CMWAP 代理。但是由于 CMWAP 只是中国移动建立的一个 HTTP 网络服务器,所以在使用 HTTP 网络编程中,可以很方便的使用。但是在使用 socket 方法操作时,这个方式好象就行不通了。下面就介绍一下如何使用 socket 连接来穿越 CMWAP 代理。其实由于CMWAP 是一个标准的 HTTP 代理服务器,也就是说可以处理任何的基于HTTP 协议的转发请求,那么就可以使用 socket 方式编程时使

13、用 HTTP 协议即可了。实现原理:使用 socket 和 CMWAP 建立连接,然后将网络协议设计成HTTP 协议的格式,这样 CMWAP 就可以继续实现请求的转发了,这就是实现的基本原理。当然,由于 socket 连接方式可以实现持续连接,这里的持续连接只存在于手机和 CMWAP 之间,但是可以只建立一次连接就实现多次的发送,还是基于请求-响应结构实现的,所以可以说实现了一部分 socket 的功能,而服务器端可以采用已有的 HTTP 服务器,从而降低开发成本和时间。该技术的优势主要有以下几点: 使用 CMWAP 进行数据传输,可以为用户节约流量费用。 由于手机和 CMWAP 之间建立的是

14、持续连接,所以可以提高网络响应速度。 使用该方式,可以实现服务器端兼容 HTTP连接和 socket 连接,也就是使用一组服务器,降低开发成本和减少开发时间。实现网络操作的代码如下所示:package cmwaptest;import java.io.*;import javax.microedition.io.*;/* 测试使用 socket 连接穿越 CMWAP 服务器*/public class CmwapThread extends ThreadCmwapForm cf;public CmwapThread(CmwapForm cf)this.cf = cf;public void r

15、un()try/测试cf.displayInfo(“开始建立连接!“);/使用代理连接SocketConnection sc = (SocketConnection)Connector.open(“socket:/10.0.0.172:80“);/测试cf.displayInfo(“连接建立完毕!“);/发送数据OutputStream os = sc.openOutputStream();String requestLine = “get http:/ http/1.0rn“;String header = “accept:*/*rnrn“;os.write(requestLine.getB

16、ytes();os.write(header.getBytes();os.flush();/测试cf.displayInfo(“数据发送完毕!“);/接收数据InputStream is = sc.openInputStream();byte data = new byte10240;int num = is.read(data);/测试cf.displayInfo(“数据接受完毕!“ + “数据长度为:“+ num);/处理数据cf.doStr(data,num);sc.close();catch(Exception e)/e.printStackTrace();cf.doError(e.toString();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报