网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  wireless messaging api     
  文章作者:未知  文章来源:水木森林  
  查看:75次  录入:管理员--2007-11-16  
 

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.

注:本文主要根据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。

 
 
上一篇: 使用game api函数制作二维动作游戏    下一篇: 深入理解collections api
  相关文档
lbound 方法 11-16
j2ee层次设计架构实例的分析详解(1) 11-16
用java创建带图像的菜单 11-17
activemq和lingo实现jms和异步调用 11-17
从.class文件中寻找类名 11-17
java script在wap网页中的开发应用技术 11-16
扩展classloader定制类装载器 11-17
java语言中的classloader与package机制 11-29
新手入门:java数据库接口jdbc驱动设置 11-16
事务:在控制之中吗?--附一些高深内容 11-17
drools 2.5 发布 11-17
为网络做准备j2ee部署中的下一个冲击波(图) 11-17
循速渐进学用session bean(三) 11-16
java基础:创建java程序中线程池的详解 11-16
classworking工具箱:反射泛型 11-17
ireport整合向量图形的使用心得 11-17
oracle应用服务器实现java corba 11-17
powerfolder 工作流服务器版本0.5 试驾之旅(2) 11-17
实例解析:在java语言中对文件操作大全 11-16
将数字字符串转换成大写金额字符串 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息