J2ME短信处理: jsr120

1.


JSR120: http://jcp.org/aboutJava/communityprocess/final/jsr120/index.html

jsr120规定的受限SMS Port Numbers

下面的表格给出了jsr120规定的受限SMS Port Numbers

Port number Description
2805 WAP WTA secure connection-less session service
2923 WAP WTA secure session service
2948 WAP Push connectionless session service (client side)
2949 WAP Push secure connectionless session service (client side)
5502 Service Card reader
5503 Internet access configuration reader
5508 Dynamic Menu Control Protocol
5511 Message Access Protocol
5512 Simple Email Notification
9200 WAP connectionless session service
9201 WAP session service
9202 WAP secure connectionless session service
9203 WAP secure session service
9207 WAP vCal Secure
49996 SyncML OTA configuration
49999 WAP OTA configuration
普通SMS的端口是特定的,可以通过this.getAppProperty("SMS_Port")来获取,只要你的设备支持JSR120。


2.


 

http://www.cnjm.net/tech/article2857.html  

用J2ME收发短信 -- Wireless Messaging API 

本文版权归原作者,中国JAVA手机网收录本文的目的是让更多人阅读到此文章。转载请注明出处为中国JAVA手机网www.cnjm.net  [出处:51cto.com整理]   作者:Eric Giguere  
【导读】本文将简要的介绍Wireless Messaging API(JSR 120)的一些基本知识
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;

JAVA手机网[www.cnjm.net]

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 {

JAVA手机网[www.cnjm.net]

BinaryMessage msg=conn.newMessage( conn.BINARY_MESSAGE);

当然了,你所能发送的数据量是有限的,一般来说,SMS文本信息可以包含160或者是70个字符,

JAVA手机网[www.cnjm.net]

这 依赖于你使用何种字符编码,如果是二进制数据,那么容量是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()

JAVA手机网[www.cnjm.net]


方法决定某一个特别的短信息能否被发送,并且需要把这条信息拆分为多少个信息段(message segments)。

上 面介绍了如何应用WMA发送短信息,应用WMA接收短信息更加简单,当打开一个Server Connection后(此时建立connection时,不需指定电话号码,只需要指定协议以及监听端口号),直接调用 MessageConnection接口的receive()方法,该方法返回在当前设备的指定端口收到的下一个短信息。如果没有短信息到达,那么该方法 将会阻塞,并等待下一个短信息的到达,或者由另一个不同的线程关闭此连接。请看下面的示例代码:

import java.io.*;

JAVA手机网[www.cnjm.net]

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 ){

JAVA手机网[www.cnjm.net]

Message msg = conn.receive(); // blocks

if( msg instanceof BinaryMessage ){

byte[] data =

JAVA手机网[www.cnjm.net]

((BinaryMessage) msg).getPayloadData();

// do something here

} else {

String text =

((TextMessage) msg).getPayloadText();

// do something here

}}

}

catch( Exception e ){

// handle it

JAVA手机网[www.cnjm.net]


}

finally {if( conn != null ){

JAVA手机网[www.cnjm.net]

try { conn.close(); } catch( Exception e ){}

}

JAVA手机网[www.cnjm.net]

}

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。


3.

参考

Mobile P2P messaging, Part 1:

http://www.ibm.com/developerworks/java/library/wi-p2pmsg/

Figure 1 contains a UML diagram for these interfaces.
Figure 1. Top-level WMA interfaces in the javax.wireless.messaging package
Top-level WMA interfaces in the  javax.wireless.messaging package
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值