网络连接模块

一直有一个疑问:CMWAP环境下是否可用Socket。以前没仔细去了解CMWAP,今天详细了解下:CMWAP是基于http协议的,所以用socket通信肯定是不行的。Http://10.0.0.172:80。从这可以看出,协议--http,端口--80,注意一个问题:协议是http,不是httpS。

 

在网上看到一篇文章:使用Socket连接穿越CMWAP代理(http://www.360doc.com/content/07/0309/16/3500_390662.shtml)

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

 

文章中的代码没有去测试,手上没socket的地址,用到的时候再去研究吧。

----------------------------------------------------------------------------------------------------------------------------------------------

这个帖子中有一些可取的建议:http://www.iteye.com/topic/195584

cmnet才行,cmwap只能走http


需要证书是因为JavaME规范的问题,你用socket链接某些特殊的端口(http 80 8080,,wap9201~9203)等,需要证书,只要你服务器不是这些敏感端口,可以随意用socket链接的。不幸的是cmwap代理的端口就是80

 

CMWAP是不能走SOCKET的,要想走的话,要去移动登记注册

------------------------------------------------------------------------------------------------------------------------------------------------

上面提到的CMWAP只能用于http,非https。在网上找到一个文章,该文十分详细,顶楼主http://files.cnblogs.com/felixYeou/MySocketHttpConnection.rar

 

利用socket来解决这个问题

conn = (SocketConnection) Connector.open("socket://10.0.0.172:80", Connector.READ_WRITE, true); 

conn.setSocketOption(SocketConnection.DELAY, 0);

conn.setSocketOption(SocketConnection.KEEPALIVE, 300);

// 发送和回复的请求

os = conn.openDataOutputStream();

is = conn.openDataInputStream();

// 在此我们使用HTTP 1.0,HTTP 1.1自己还需要处理chunk,比较麻烦

String reqStr =  "GET https://ebs.95559.com.cn/corporbank/es_logon.jsp HTTP/1.0/r/n" +

"Host: ebs.95559.com.cn:443/r/n" +

"User-Agent: FelixBrowser/r/n" +

"Accept-Charset: utf-8;/r/n" +

"Connection: close;/r/n" +

"Accept-Language: zh-cn/r/n/r/n";

os.write(reqStr.getBytes());

os.flush();

 

该方法跟前面提到的使用Socket连接穿越CMWAP代理,原理都是一样:跟代理地址建立连接,再转发:GET https://ebs.95559.com.cn/corporbank/es_logon.jsp HTTP/1.0/r/n"

----------------------------------------------------------------------------------------------------------------------------

再次来研究get与post的不同之处:

Get----相对来说容易:所有的参数都附在url后面,不存在像post一样,需要打开输出流,将所有参数提交出去。

步骤:打开连接,获取响应的输入流,接受数据,就OK。

httpconnection = (HttpURLConnection) getUrl.openConnection();

 

httpconnection.setUseCaches(false);//设置一些参数

httpconnection.setRequestMethod("GET");

httpconnection.setConnectTimeout(connnetTime);

httpconnection.connect();

 

 

Post ----比get强大些,比如可以上传文件等...

httpconnection = (HttpURLConnection) postUrl.openConnection();//此处跟get相似

 

 

httpconnection.setRequestProperty("connection", "keep-alive");

httpconnection.setRequestMethod("POST");

httpconnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");//文件类型,若是文件上传,则要改变类型了,看下面的讲述

httpconnection.setRequestProperty("Content-Length", Integer.toString(postCon.getBytes().length));

httpconnection.setDoInput(true);//设置可以输入

httpconnection.setDoOutput(true);//设置可以输出

httpconnection.setUseCaches(false);

httpconnection.setConnectTimeout(connnetTime);设置超时时间

//打开输出流,将参数提交出去,此处get是没有的

OutputStream out = httpconnection.getOutputStream();   

            DataOutputStream data = new DataOutputStream(out);

            data.write(postCon.getBytes());   

            data.flush();   

            data.close();   

            out.close(); 

httpconnection.connect();//此处跟get相似

---------------------------------------------------------------------------------------------------------------------------------

关于application/x-www-form-urlencoded等字符编码的解释说明

application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。这是标准的编码格式

multipart/form-data: 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。 

text/plain:窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。

 

参考文章:http://www.xiaotai.com/article.asp?id=2125

 

收集到的一个上传文件类工具:

http://lgj573.iteye.com/blog/670273

http://student.csdn.net/space.php?uid=46868&do=blog&id=25873

 

 

 



 


 



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值