JSPCN主页 | JSP空间 | 网站制作 | JSP下载 | JSP论坛 | JSP教程 | 关于JSPCN | 联系我们
JSP虚拟主机,jsp空间,java空间,java虚拟空间,详细请点击进入
做最专业的JSP中文网站 当前位置首页--JAVA技术--Java API  
文章搜索:
关键字 标题
  
JSP中文网内容管理系统(JCMS)
JSP虚拟主机
网络笔记本
网摘,图片,笔记收藏
虚拟服务器

JSPCN文章目录分类
JSP配置[219]JSP基础[136]
中文问题[69]上传问题[27]
JAVABEAN[46]数据库[212]
文件操作[126]图片声音[17]
JSP其他[57]时间相关[16]
JAVAMAIL[72]STRUTS[144]
开发工具[28]教程系列[157]
JSP实例[89]
JAVA基础[421]APPLET[78]
JAVA网络[179]Applica[115]
Servlet[98]XML[163]
J2ME[257]J2EE[374]
考试相关[63]JAVA线程[90]
EJB[261]Swing[26]
Java API[141]声音图片[28]
异常处理[33]JAVA实例[290]
JAVA类[139]SUN[89]
Hibernate[6]JMX[8]
Spring[34]
本版推荐文章 
本版热点文章 
相关文章链接 
 
Wireless Messaging API
作者:未知     文章来源:www.jspcn.net
访问次数:437次     加入时间:2005年01月19日
Wirelesss Messaging API Basics
注:本文主要根据Eric Giguere写的Wireless Messaging API Basics翻译而成,原文可以参见
Wireless Developer Newsletter(October 15, 2002),具体网址为:
http://wireless.java.sun.com/midp/ttips/wma/
本文并非字字照译,而只是译其大意而已,文中代码均没有经过验证,仅供参考而已。如果有问题,请和我联系:javalover.bbs@bbs.pku.edu.cn。
本文将简要的介绍Wireless Messaging API(JSR 120)的一些基本知识。
什么是Wireless Messaging API?它有什么用?
Wireless Messaging API属于J2ME体系的一个Optional Package,通常简称为WMA,使用它可以通过无线连接发送和接受短文本信息或者是二进制信息。WMA基于Generic ConnectionFramework(GCF),GCF在Connected Limited Device Configuration (CLDC)中定义,GCF提供了一个抽象的框架用于履行输入和输出操作,GCF也是Connected Device Configuration (CDC)的一部分,因此何J2ME-enabled设备上使用WMA。
应用WMA,意味着你可以使用cellular telephones(蜂窝电话)或者是相似的设备通过各种无线网络发送和接收短信息,而不管这个无线网络是基于GSM还是CDMA。值得一提的是,WMA还支持ShortMessage Service (SMS,短信息服务)和 Cell Broadcast Short Message Service (CBS).尽管WMA消息和数据报(datagrams)十分相似,但是WMA并没有使用GCF框架中定义的数据报接口(datagraminterfaces),因为这种接口是为UDP Connections而设计的。WMA在javax.wireless.messaging包中定义了一套全新的接口,用于接收和发送短消息。

在WMA中,为了接收或者是发送短消息,你必须首先获得一个MessageConnection接口的实例,调用javax.microedition.io.Connector的open()方法可以返回MessageConnection接口的实例,参数是字
符串型的URL,该URL和HTTP协议中的URL十分相似,它必须指定所使用的协议(SMS或者是CBS),目标电话的号码,端口号等等,例如下面的URL都是合法的URL:
1. sms://+417034967891
2. sms://+417034967891:5678
3. sms://:5678
4. cbs://:5678
在上述URL串中,第一个和第二个URL串指定了目标设备(移动电话)的号码,第二个URL串还指定了端口号,如果端口号没有被指定,那么WMA将会使用目标设备上缺省的文本信息端口(text messaging port),上述两种情况主要用于发送短信息的情况。第三个URL串表明指定的是本机的端口,这种情况主要用于接收短信息。第四个URL串也是指定本机的端口,这种情况主要适用于监听网络中广播信息。第三个URL串和第四个URL串的主要区别在于所哦使用的协议不一样。
下面我们来看一段简单的创建SMS客户端的代码:
import javax.microedition.io.*;
import javax.wireless.messaging.*;
.....
MessageConnection conn = null;
String url = "sms://+417034967891";
try
{
conn = (MessageConnection) Connector.open( url );
// do something with the connection
}
catch( Exception e )
{
// handle errors
}
finally
{
if( conn != null )
{


}
}
现在SMS客户端是创建起来了,也就是说你手上的设备已经和服务器建立了连接,那么如何发送短信息呢?首先,你应该使用MessageConnection接口的newMessage()方法创建一个空(empty)的消息,然后再设置该消息的PayloadText(也就是需要发送的文本或者是二进制数据),最后调用MessageConnection的send()方法将短信息发送到目标设备中去。请看下面的代码:
public void sendText( MessageConnection conn, String text)
throws IOException, InterruptedIOException {
TextMessage msg = conn.newMessage( conn.TEXT_MESSAGE );
msg.setPayloadText( text );
conn.send( msg );
}
如果是发送二进制格式的数据,那么代码略有不同:
public void sendBinary( MessageConnection conn, byte[] data)
throws IOException, InterruptedIOException {
BinaryMessage msg=conn.newMessage( conn.BINARY_MESSAGE);


当然了,你所能发送的数据量是有限的,一般来说,SMS文本信息可以包含160或者是70个字符,
这依赖于你使用何种字符编码,如果是二进制数据,那么容量是140字节(Note:The WMA requires support for message concatenation, however, which means that these limits are actually at least three times higher.)。同时,你可以使用MessageConnection接口的numberO fSegments()
方法决定某一个特别的短信息能否被发送,并且需要把这条信息拆分为多少个信息段(message segments)。

上面介绍了如何应用WMA发送短信息,应用WMA接收短信息更加简单,当打开一个Server Connection后(此时建立connection时,不需指定电话号码,只需要指定协议以及监听端口号),直接调用MessageConnection接口的receive()方法,该方法返回在当前设备的指定端口收到的下一个短信息。如果没有短信息到达,那么该方法将会阻塞,并等待下一个短信息的到达,或者由另一个不同的线程关闭此连接。请看下面的示例代码:
import java.io.*;
import javax.microedition.io.*;
import javax.wireless.messaging.*;
MessageConnection conn = null;
String url = "sms://:5678"; // no phone number!
try {
conn = (MessageConnection) Connector.open( url );
while( true ){
Message msg = conn.receive(); // blocks
if( msg instanceof BinaryMessage ){
byte[] data =
((BinaryMessage) msg).getPayloadData();
// do something here
} else {
String text =
((TextMessage) msg).getPayloadText();
// do something here
}
}
}
catch( Exception e ){
// handle it
}
finally {
if( conn != null ){
try { conn.close(); } catch( Exception e ){}
}
}
WMA的任务只是接收和发送短信息,并不去解释它们。通常来说,应用程序之间会来回发送二进制数据类型的信息,java.io包的DataInputstream,DataOutputstream,ByteArrayInputstream
和ByteArrayOutputStream 类在对这些二进制数据解码和编码时十分有用。
访问下面两个网址可以获得更多关于WMA的信息:
[1]http://java.sun.com/products/wma/
[2]http://jcp.org/aboutJava/communityprocess/final/jsr120/index.html.
 
JSP虚拟主机 | JSP空间 | JSP主机 | JSP双线虚拟主机 | JAVA空间 | JAVA虚拟主机 | 虚拟服务器 | JSP 虚拟服务器 | VPS
Virtual Private Server | JAVA虚拟服务器 | VM服务器 | VHOST | 虚拟操作系统 | JSP论坛 | JAVA论坛 | JSP站点论坛
Copyright © 2002-2005 JSPCN.net. All rights reserved.
JSP中文网    备案序号:蜀ICP备05001583号
成都恒海科技发展有限公司    成都市一环路南二段6号新瑞楼三楼8号