SMSLib 是一个经GSM猫或者移动电话发送和接收SMS的类库,有java和.net两个版本。
已经提供了发送PDU格式短信的支持了。而且提供服务器模式,可以通过http方式调用收发短信。
发送程序来自smslib的分发包。SendMessage.java,稍作改动,以适应我手中的wavecom短信猫。
Service srv; OutboundMessage msg; srv = new Service(); SerialModemGateway gateway = new SerialModemGateway(“modem.com5”, “COM5”, 115200, “WAVECOM”, “–”); gateway.setInbound(true); gateway.setOutbound(true); gateway.setSimPin(“0000”); srv.addGateway(gateway); srv.startService(); msg = new OutboundMessage(“13801001000”, “中文测试。”); msg.setEncoding(MessageEncodings.ENCUCS2); srv.sendMessage(msg); System.out.println(msg);
Service srv; OutboundMessage msg; srv = new Service(); SerialModemGateway gateway = new SerialModemGateway(“modem.com5”, “COM5”, 115200, “WAVECOM”, “–”); gateway.setInbound(true); gateway.setOutbound(true); gateway.setSimPin(“0000”); srv.addGateway(gateway); srv.startService();
msg = new OutboundMessage(“13801001000”, “中文测试。”); msg.setEncoding(MessageEncodings.ENCUCS2); srv.sendMessage(msg); System.out.println(msg);
这是比较简单的同步方式发送短信,也就是说在发送过程中,线程将被阻塞,等待发送结束继续执行。测试了一下,基本上是间隔4-5秒钟发送一条。
这对大规模使用会造成影响,尤其是多线程的情况下,smslib提供了另外一种异步的方式,smslib提供了队列机制,调用者可以将发送短信排到 队列中,然后不停顿的做其他事情。但是smslib没有提供持久化的队列,当断电或者短信猫中断,队列中的数据将消失,因此使用异步方式的时候,还需要自 己实现一个持久的队列备份机制。
另外,需要注意的是,使用smslib需要导入smslib使用的第三方类库,按照官方文档的说法是log4j,但是,我使用的版本,已经更换为 slf4j,那么log4j就不是必须的了,因为可以切换到java logging api上,另外,如果使用的gateway是SerialModem,也就是串口猫的话,可以不用commons-net api。以下是类库的截图: