没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
[J2ME]J2ME
连网 & 不同运营商网络的连网
随着中国移动,联通,电信的先后获得 3G 牌照,移动软件开发必定会热起来,
无论是现在热火朝天的 J2ME 版的 UCWEB,QQ,还是移动的飞信等都是必须
连网的,因此掌握 J2ME 的网络编程是我们程序员的一门绝技,而通用连接框
架则是网络编程的基础。
这篇文章主要介绍
1. 通用连接框架的基础知识。
2. 中国环境下的网络开发
请注意本文假定读者熟悉 J2ME 环境中的 MIDlet 开发。需要在系统中安装
J2ME 开发环境才能编译代码示例,以及 J2ME Wireless Toolkit(WTK) 的安装
指导,请参阅文章末尾参考资料 的小结。
GCF 是一组在 javax.microedition.io 包中定义的接口。图 1 显示了 GCF
的类层次结构。
&
通用连接框架介绍
图 1. 通用连接框架的类层次结构
&
在 GCF 中共定义了七个接口 ,其中 Connection 是根。注意同时提供了对
数据包(packet)和流连接的支持。正如您设想的那样,沿着层次结构向下就
会发现提供更多功能的接口。例如, StreamConnection 支持输入和输出流,
ContentConnection 扩展了 StreamConnection 以支持对流的内容类型、数据
长度和编码格式的确定。
Connector 类用于在 GCF 中打开类型的连接。下面可以看到 Connector
类中的 open() 方法的格式:Connector.Open("protocol:address;parameters");
Open 方法会根据你提供的字符串参数进行 Connection 的绑定。
GCF 在支持不同的连接协议方面特别灵活。在请求打开一个连接时,
Connector 类使用其 Class.forName() 方法搜索实现了所请求的协议的类。如
果找到这个类,就返回一个实现了 Connection 接口的对象。
下面是一些常用打开一个 Connection 的方法:
&
Connector.Open("socket://www.lexun.com:80"); //TCP 套接字通讯连接建立
Connector.Open("http://www.itpub.net");//通过 Http 协议数据通信
Connector.Open("datagram://www.ucweb.com:1000");//数据报套接字通讯建
立
Connector.Open("file://makefile.txt");//访问手机文件
Connection conn = Connector.open("comm:0; baudrate=5333");//基于串口协
议的数据通信
连接框架的用法
七种创建连接的方法,下面是代码示例
public static Connection open(String name)
&& public static Connection open(String name)
&& public static Connection open(String name, int mode, boolean timeouts)
&& public static DataInputStream openDataInputStream(String name)
&& public static DataOutputStream openDataOutputStream(String name)
&& public static InputStream openInputStream(String name)
&& public static OutputStream openOutputStream(String name)
Connector 构建了 7 个静态的方法,上面方法,具体的相关用法以及参数
说明可以查看 APIs 文档。
通讯连接的 IO 数据流过程基本步骤分别是建立连接、网络通讯、连接关闭。
1、建立连接,创建与服务端的连接初始化以及完成连接过程。
2、数据通讯,在连接已建立的基础上进行数据的交换以及完成通讯过程。
3、完成通讯之后即关闭网络通讯连接,释放资源。
使用小秘密:
在程序调用 Connector.open()相关方法的时候,如果您的 J2ME 程序是没
有经过签名的,系统会弹出一个是否允许的对话框,其实,我们在开发的过程
中也可以调用下面的代码进行一些权限的判断,然后做出适当的动作。
MIDlet. checkPermission("javax.microedition.io.Connector.file.read");
MIDlet. checkPermission("javax.microedition.io.Connector.file.write");
MIDlet.checkPermission("javax.microedition.io.Connector.http")
其他一些权限检查请查看相关的 APIs 文档。
简单用法代码片段
// Create a ContentConnection
String url = "http://www.corej2me.com"
ContentConnection connection = (ContentConnection) Connector.open(url);
// With the connection, open a stream
InputStream iStrm = connection.openInputStream();
// ContentConnection includes a length method
int length = (int) connection.getLength();
if (length != -1)
{
&&byte imageData[] = new byte[length];
&&// Read the data into an array
&&iStrm.read(imageData);
}
3 .1 中国的网络环境
运营商 代理名称 用法介绍 直连名称 用法
中国移
动
CMWAP
CMWAP 是中国移动的 GPRS 代理上
网。
创建连接的时候,不能直接采用
Connector.open("targetaddress");
而是采用代理的方式进行连接
具体相关的创建代码是代理的方式。
代理地址是:10.0.0.172
代理 Header 是:X-Online-Host
CMNET
3 家运营上
的直连方
式,创建连
接跟 PC 无
异。
中国联
通
UNIWAP
UNIWAP 是中国联通退出的一种上网模
式。类似于中国移动。具体创建连接的
方式跟中国移动类似。
代理地址是:10.0.0.172
代理 Header 是:X-Online-Host
在处理网关的时候可能会有一些细致
的差别,比如在发送 Header 数据的时
候。
UNINET
中国电
信
CTWAP
CTWAP&是 中国电信最近推出的上网方
式。到目前为止我还没有找到 j2me 可以
上 ctwap 的方式,网上只是提到了代理
地址是 10.0.0.200,header&key 是啥,
该传什么值,暂时还不知道,如果有读
者知道的可以联系我
CTNET
(gooogledev@gmail.com)
3 .2 HttpConnection 介绍
我们先来讲解下 HttpConnection 相关的方法。
现在您已经看到 GCF 是如何支持不同类型的连接的,并且开发了我们的
第一个连网 MIDlet,现在可以更深入地分析 MIDP 中对 HTTP 的支持。我们将
首先从一个更新过的层次结构图开始,它表明了哪个类提供了对 HTTP 连接的
支持。
图:支持 HTTP 的 GCF 类
原来的 MIDP 1.0 规范只要求设备支持 HTTP 连接协议,而更新的 MIDP
2.0 规范要求同时支持 HTTP 和 HTTPS,后者提供了对更安全 style="COLOR:
#000000" href="http://safe.it168.com/" target=_blank>安全的网络连接的支持。
使用这些协议的 API 分别是 HttpConnection 和 HttpConnection 。除了这些强
制性的协议,设备制造商可能会选择支持更多的通信协议,如数据包或者套接
字。虽然有时会方便一些,但是您应当了解使用特定于厂商的协议会影响应用
程序到其他设备的可移植性。
请求和响应协议:HTTP 和 HTTPS 都是请求/响应协议。客户机发送请求,
而服务器 style="COLOR: #000000" href="http://server.it168.com/"
target=_blank>服务器发送响应。在继续后面的内容之前,我们将分析客户请
求和服务器响应的各个方面。
客户请求:客户请求(client request),有时称为请求实体,由以下三个
部分组成:
· 请求方法
· 头
· 正文
我们将详细讨论这三个部分。
请求方法:请求方法(request method)确定数据如何发送给远程资源。
可以使用的三种方法是 GET、 POST 和 HEADER 。使用 GET 时,数据是作
为 URL 的一部分发送的。使用 POST 时,所有客户机数据都是在与建立连接
的请求不同的、单独的流中发送的。 HEADER 请求不向服务器发送任何数据。
相反, HEADER 请求只是描述(meta)关于远程资源的信息。
用 GET 打开一个 HTTP 连接
String url = "http://www.ucweb.com?size=large";
HttpConnection http = null;
http = (HttpConnection) Connector.open(url);
http.setRequestMethod(HttpConnection.GET);
setRequestProperty("User-Agent", "Openwave");
Openwave -- 是一个比较出名的 Wap 浏览器厂商,因此设置这个 UA,移动网
关一般可以通过。
用 POST 打开一个 HTTP 连接
String url = "http://www.ucweb.com",
tmp = "test data here";
OutputStream ostrm = null;
HttpConnection http = null;
http = (HttpConnection) Connector.open(url);
http.setRequestMethod(HttpConnection.POST);
剩余24页未读,继续阅读
allenlei2008
- 粉丝: 4
- 资源: 25
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Flume进阶-自定义拦截器jar包
- Dubins曲线算法讲解和在运动规划中的使用.pdf
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.dta
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.xlsx
- Reeds+Shepp曲线算法讲解和实现.pdf
- 毕业设计基于SpringBoot+MyBatisPlus+MySQL+Vue的外卖配送信息系统源代码+数据库
- 词向量(Word Embeddings)是自然语言处理(NLP)领域的一种重要技术.txt
- Surfer,线性函数
- MyBatis 的动态 SQL 是其核心特性之一.txt
- 时代的sdddsddsddsd
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0