用 Java 通过串口发短信其实很简单,因为有现成的类库供我们使用。有底层的类库,也有封装好一点的类库,下面我介绍一下在 Win32 平台下发送短信的方法。
如果你想用更底层的类库开发功能更强大的应用程序有两种选择:一个是 SUN Java Comm(下载地址:javacomm20-win32.zip),另一个是 RxTx (下载地址:Rxtx.zip)
用这两个类库开发程序的先决条件是你要很好掌握串口的知识,比如 AT 命令等,这些基本知识学起来是需要一定时间的,不过不用担心,现在也有开源的已经封装好的类库供我们使用,这就是 SMSLib - SMS Processing Libraries (下载地址:SMSLib),今后的几篇系列文章主要目的就是介绍 SMSLib 的使用,今天首先就是要安装环境了,注意最新的 SMSLib 只能在 JRE5.0 或以后的版本才能运行。
SMSLib 也是构建在 SUN Java Comm 和 RxTx 基础之上的,这两个类库你可以自己选择,不过 SMSLib 默认采用的是 SUN Java Comm(即你下载下来的 SMSLib 包中的 dist\lib 目录下的 smslib-2.1.2.jar 是用 SUN Java Comm 编译生成的),
如果你想更换成 RxTx 就需要更改 SMSLib 的源文件并重新编译,具体方法为:
将 src\java\org\smslib 文件夹下的 CSerialDriver.java 这个文件的 "import javax.comm.*;" 修改为 "import gnu.io.*;",然后用 ant 工具重新编译生成的 jar 文件就是基于 RxTx 实现的。
下面介绍一下 SUN Java Comm 和 RxTx 的安装过程:
1. SUN Java Comm:
将 "javax.comm.properties" 拷贝到 "%JREHOME%/lib" 目录下
将 "win32com.dll" 拷贝到 "%JREHOME%/bin" 目录下
2. RxTx
将 "rxtxSerial.dll" 拷贝到 "%JREHOME%/bin" 目录下
然后将 "comm.jar" 或者 "RXTXComm.jar" 加载到你的工程环境中就可以了,另外还要记着下载 log4j,因为 SMSLib 用到了它。
如果对串口有兴趣的朋友可以去研究一下 AT 命令,直接使用 SUN Java Comm 和 RxTx 编写应用程序,可以实现更强大的功能。
http://www.blogjava.net/qujinlong123/
先简单的来介绍一下如何使用 SMSLib 收发短信。
SMSLib 的唯一的入口类是 CService 类,该类主要负责设置各种访问手机的参数,以及提供收发短信的功能。
CService 类只有一个构造函数 CService(String port, int baud, String gsmDeviceManufacturer, String gsmDeviceModel) 其中 port 是串口的端口号如 "COM5",baud 是访问串口的速率,该值的设定可以根据你的设备管理器里面的串口的属性中支持的波特率设定合适的值,gsmDeviceManufacturer, gsmDeviceModel 这两个参数主要是用来确定具体的 ATHandler 的实现,如果你想用 SMSLib 默认的 ATHandler,这两个值都可以设置为 null 或者 "", 如果你想采用适合你自己手机型号的特定的 ATHandler 的时候,只要自己写一个继承 AbstractATHandler 的实现类,然后再用相关名称标识设置 gsmDeviceManufacturer, gsmDeviceModel 的值就可以了。
接收短信的代码如下:
1 try
2 {
3 CService srv = new CService("COM5", 9600, null, null);
4
5 srv.connect();
6
7 LinkedList messageList = new LinkedList();
8
9 srv.readMessages(messageList, CIncomingMessage.MessageClass.All);
10
11 // TODO: 处理返回的 messageList。
12
13 srv.disconnect();
14 }
15 catch (Exception e)
16 {
17 e.printStackTrace();
18 }
上面的代码是读取手机中全部的短信,你也可以通过设置 CIncomingMessage.MessageClass 参数来读取不同类型的短信,比如 CIncomingMessage.MessageClass.Read 表示只读取已读短信,CIncomingMessage.MessageClass.Unread 表示只读取未读短信,你也可以使用 readMessages(LinkedList messageList, int messageClass, int limit) 读取你想要的指定数目的几条短信。
发短信的过程也很简单,代码如下:
1 try
2 {
3 CService srv = new CService("COM5", 9600, null, null);
4
5 srv.connect();
6
7 COutgoingMessage msg = new COutgoingMessage("138102*****", "我的第一条短信。。。");
8
9 msg.setMessageEncoding(CMessage.MessageEncoding.EncUcs2);
10
11 srv.sendMessage(msg);
12
13 srv.disconnect();
14 }
15 catch (Exception e)
16 {
17 e.printStackTrace();
18 }
发送中文短信时要设置消息的编码方式为 CMessage.MessageEncoding.EncUcs2,而且还要设置手机发送短信的协议为 PDU 模式,CService 默认的协议就是 PDU, 所以在上面的代码中没有设置。
在后面的文章中我会继续介绍收发短信时各个参数的意义及如何设置。
http://www.blogjava.net/qujinlong123/
分享到:
相关推荐
最新版的smslib,手机发送短信非常方便
smslib-v3.4.5下运行成功,主要是以下几个类. Level_Final_Serial.java:串口底层操作 Serial_For_Smslib.java:对Level_Final_Serial的进一步封装,可以直接发送和接受串口信息. 如果要发送AT指令,需要先转换成相应的...
smslib-3.5.0.jar
smslib-v3.4.5下运行成功,主要是以下几个类. Level_Final_Serial.java:串口底层操作 Serial_For_Smslib.java:对Level_Final_Serial的进一步封装,可以直接发送和接受串口信息. SmsService.java:smslib的封装 ...
在Windows环境下使用SMSLib编程的时候,我们需要做一下comm的配置: 1. 将win32com.dll放置在%JAVA_HOME%/jre/bin下 2. 将comm.jar放置在%JAVA_HOME%/jre/lib/ext下 3. 将javax.comm.properties放置在%JAVA_HOME%...
发送短信的jar包smslib.jar 下载
smslib包中提取出的smsserver工程源码,亲测可用。其中已完美支持中文,已更新默认的发布包中不包含HttpServer,需要自己编译一下。将“smslib-v3.5.3/misc/SMSServer/Interfaces/Stable/HttpServer.java”拷贝到...
Sending and receiving of SMS using Java
SMSLib一个很有用的程序,有服务平台和收发平台
smslib使用rxtx发短信需要的jar,commons-net-3.0.1.jar ,jsmpp-2.1.0.jar,log4j-1.2.16.jar,RXTXcomm.jar, slf4j-api-1.6.3.jar,slf4j-log4j12-1.6.3.jar, smslib-3.5.2.jar
smslib-3.4.1.jar
SMSLib串口通信.doc SMSLib的配置和使用用例
短信猫开发smslib源码,方便了解smslib。jar里面的类以及类里面是属性。
smslib3.4.5的源码。smslib是java语言开发的操作短信猫gsm modem的开源库,好用,不过该版本里面需要完善的东西很多,代码中todo的注释也很多,可供开发时调试使用。
smslib-v3.5.2
短信猫smslib最新jar包,版本号:3.5.4。下载后直接解压后就会看到smslib-3.5.4.jar
java调用短信猫发送接收信息,smslib-v3.5.1 。
SMSLib是一个开放源代码的短信猫二次开发包,有JAVA和.Net两个版本,目前最新版为v3.5.2,GSM模块中短信的读取和发送
Eclipse项目,java语言编写的串口短信猫发送短信,用的smslib组件