首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

SMSLib兑现Java短信收发的功能(转)

2012-08-25 
SMSLib实现Java短信收发的功能(转)摘选:http://sjsky.iteye.com/blog/1045502? 用java实现短信收发的功能,

SMSLib实现Java短信收发的功能(转)

摘选:http://sjsky.iteye.com/blog/1045502?

用java实现短信收发的功能,目前一般项目中短信群发功能的实现方法大致有下面三种:

1、 向运行商申请短信网关,不需要额外的设备,利用运行商提供的API调用程序发送短信,适用于大型的通信公司。2、 借助像GSM MODEM之类的设备(支持AT指令的手机也行),通过数据线连接电脑来发送短信,这种方法比较适用于小公司及个人。要实现这种方式必须理解串口通信、AT指令、短信编码、解码。3、 借助第三方运行的网站实现,由网站代发短信数据,这种方法对网站依赖性太高,对网络的要求也比较高。
?????? 鉴于项目的情况和多方考虑,同时又找到了一个开源的SMSLib项目的支持,比较倾向于第二种方法,SMSLib的出现就不需要我们自己去写底层的AT指令,这样就可以直接通过调用SMSLib的API来实现通过GSM modem来收发送短信了。

SMSLib官方网站:http://smslib.org/,使用SMSLib的一些基本要点:

SUN JDK 1.6 or newer. (Java环境)Java Communications Library. (Java串口通信)Apache ANT for building the sources. (编译源码时需要的)Apache log4j. (日志工具)Apache Jakarta Commons - NET. (网络操作相关的)JSMPP Library (SMPP协议时需要的)


有关Java串口通信需要补充说明:

window系统可以用SUN Java Comm v2. (该版本好像也支持solaris)???????? 其下载地址:http://smslib.googlecode.com/files/javacomm20-win32.zip其他操作系统(比如:Linux, Unix, BSD,等等),你可以选择 Java Comm v3 或者是RxTx。???????? Java Comm v3下载地址:http://java.sun.com/products/javacomm/(需要注册);
???????? RxTx官网:http://users.frii.com/jarvi/rxtx/index.html or http://rxtx.qbang.org/wiki/index.php/Main_Page


附件提供相关下载:

java串口通信v2:javacomm20-win32.zipsmslib-3.5.1.jar短信 modem驱动:PL2303_Prolific_DriverInstaller_v130.zip


本次测试的环境是window,GSM modem是wavecom,所以这次主要描述window环境下简单的实现过程:
【一】、配置相应的环境
????? 首先解压下载的Java Comm v2文件javacomm20-win32.zip,具体配置步骤如下:

把文件:comm.jar copy 到目录:<JDKDIR>/jre/lib/ext/,当然这一步也可以不要这样做,你只需把comm.jar copy到所要运行的项目对应的lib/下既可把文件:javax.comm.properties copy 到目录:<JDKDIR>/jre/lib/把DLL文件:win32com.dll(windows) copy 到目录:<JDKDIR>/jre/bin/如果存在JRE目录, 最好按照上面步骤把文件copy到<JREDIR>相应的目录下


【二】、测试串口端口程序:
TestGetPortList.java

        package?michael.sms;????import?java.util.ArrayList;??import?java.util.LinkedList;??import?java.util.List;????import?org.apache.log4j.Level;??import?org.apache.log4j.Logger;??import?org.smslib.AGateway;??import?org.smslib.GatewayException;??import?org.smslib.InboundMessage;??import?org.smslib.OutboundMessage;??import?org.smslib.Service;??import?org.smslib.AGateway.Protocols;??import?org.smslib.Message.MessageEncodings;??import?org.smslib.modem.SerialModemGateway;????/**??*?@author?michael??*???*/??public?class?SmsHandler?{??????private?static?final?Logger?logger?=?Logger.getLogger(SmsHandler.class);????????private?Service?smsService;????????/**??????*???????*/??????public?SmsHandler()?{??????????smsService?=?Service.getInstance();??????????List<AGateway>?agatewayList?=?new?ArrayList<AGateway>();????????????String?portName?=?"COM24";//"/dev/ttyUSB0";//?COM24??????????SerialModemGateway?gateway?=?new?SerialModemGateway(??????????????????"modem."?+?portName,?portName,?9600,?"wavecom",?"PL2303");??????????gateway.setInbound(true);??????????gateway.setOutbound(true);??????????gateway.setProtocol(Protocols.PDU);??????????gateway.setSimPin("0000");??????????agatewayList.add(gateway);??????????try?{??????????????for?(AGateway?gatewayTmp?:?agatewayList)?{??????????????????smsService.addGateway(gatewayTmp);??????????????}??????????}?catch?(GatewayException?ex)?{??????????????logger.error(ex.getMessage());??????????}??????}????????/**??????*???????*/??????public?void?start()?{??????????logger.info("SMS?service?start.....");??????????try?{??????????????smsService.startService();??????????}?catch?(Exception?ex)?{??????????????logger.error("SMS?service?start?error:",?ex);??????????}??????}????????/**??????*???????*/??????public?void?destroy()?{??????????try?{??????????????smsService.stopService();??????????}?catch?(Exception?ex)?{??????????????logger.error("SMS?service?stop?error:",?ex);??????????}??????????logger.info("SMS?service?stop");??????}????????/**??????*?send?SMS??????*?@param?msg??????*?@return?Boolean??????*/??????public?Boolean?sendSMS(OutboundMessage?msg)?{??????????try?{??????????????msg.setEncoding(MessageEncodings.ENCUCS2);??????????????return?smsService.sendMessage(msg);??????????}?catch?(Exception?e)?{??????????????logger.error("send?error:",?e);??????????}??????????return?false;??????}????????private?boolean?isStarted()?{??????????if?(smsService.getServiceStatus()?==?Service.ServiceStatus.STARTED)?{??????????????for?(AGateway?gateway?:?smsService.getGateways())?{??????????????????if?(gateway.getStatus()?==?AGateway.GatewayStatuses.STARTED)?{??????????????????????return?true;??????????????????}??????????????}??????????}??????????return?false;??????}????????/**??????*?read?SMS??????*?@return?List??????*/??????public?List<InboundMessage>?readSMS()?{??????????List<InboundMessage>?msgList?=?new?LinkedList<InboundMessage>();??????????if?(!isStarted())?{??????????????return?msgList;??????????}??????????try?{??????????????this.smsService.readMessages(msgList,??????????????????????InboundMessage.MessageClasses.ALL);??????????????logger.info("read?SMS?size:?"?+?msgList.size());??????????}?catch?(Exception?e)?{??????????????logger.error("read?error:",?e);??????????}??????????return?msgList;??????}????????/**??????*?@param?args??????*/??????public?static?void?main(String[]?args)?{??????????Logger.getRootLogger().setLevel(Level.INFO);??????????OutboundMessage?outMsg?=?new?OutboundMessage("189xxxx****",?"信息测试");??????????SmsHandler?smsHandler?=?new?SmsHandler();??????????smsHandler.start();??????????//发送短信??????????smsHandler.sendSMS(outMsg);??????????//读取短信??????????List<InboundMessage>?readList?=?smsHandler.readSMS();??????????for?(InboundMessage?in?:?readList)?{??????????????System.out.println("发信人:"?+?in.getOriginator()?+?"?短信内容:"??????????????????????+?in.getText());??????????}??????????smsHandler.destroy();??????????System.out.println("-----------");??????}????}??


      发送短信亲测,手机能正常接收显示。读取设备的短信程序运行结果结果如下:

      引用
      INFO - Service.listSystemInformation(113) | SMSLib: A Java API library for sending and receiving SMS via a GSM modem or other supported gateways.
      This software is distributed under the terms of the Apache v2.0 License.
      Web Site: http://smslib.org
      INFO - Service.listSystemInformation(114) | Version: 3.5.1
      INFO - Service.listSystemInformation(115) | JRE Version: 1.6.0_18
      INFO - Service.listSystemInformation(116) | JRE Impl Version: 16.0-b13
      INFO - Service.listSystemInformation(117) | O/S: Windows Vista / x86 / 6.0
      INFO - SmsHandler.start(55) | SMS service start.....
      INFO - DefaultQueueManager.init(92) | Queue directory not defined. Queued messages will not be saved to filesystem.
      INFO - ModemGateway.startGateway(188) | GTW: modem.COM24: Starting gateway, using Generic AT Handler.
      INFO - SerialModemDriver.connectPort(68) | GTW: modem.COM24: Opening: COM24 @9600
      INFO - AModemDriver.waitForNetworkRegistration(459) | GTW: modem.COM24: GSM: Registered to foreign network (roaming).
      INFO - AModemDriver.connect(175) | GTW: modem.COM24: MEM: Storage Locations Found: SMBM
      INFO - CNMIDetector.getBestMatch(142) | CNMI: No best match, returning: 1
      INFO - ModemGateway.startGateway(191) | GTW: modem.COM24: Gateway started.
      INFO - SmsHandler.readSMS(113) | read SMS size: 1
      发信人:8618918001030 短信内容:hello 回复测试
      INFO - ModemGateway.stopGateway(197) | GTW: modem.COM24: Stopping gateway...
      INFO - SerialModemDriver.disconnectPort(120) | GTW: modem.COM24: Closing: COM24 @9600
      INFO - ModemGateway.stopGateway(201) | GTW: modem.COM24: Gateway stopped.
      INFO - SmsHandler.destroy(72) | SMS service stop
      -----------

热点排行