前言
目前用过的开源短信猫工具有jSMSEngine和SMSLib,下载地址及使用网上有很多,本文只是简要介绍短信猫的安装使用及在项目中遇到的坑。
说明:本文主要解决windows上通过短信猫发送成功而Linux上发送失败的问题。
通过短信猫发送短信案例GitHub地址:https://github.com/Airch/jSMSEngineWebPro
安装部署
- Linux系统 2.6.18以上内核已自带usb转串口驱动,所以一般情况下不需要安装驱动。
- 将usb短信猫插入服务器usb口,使用
dmesg
命令查看,出现以下信息则说明系统已经识别出短信猫,接口为/dev/ttyUSB0 (注意:如果USB接口被其他设备占用,识别出的接口可能不一样,一般是ttyUSB0或者ttyUSB1)
亦可使用命令:ls /dev/ttyUSB*
,或lsusb
检查系统是否识别出短信猫。 - 查看服务器jdk安装版本,使用java –version命令,如果显示结果中带64-Bit字样,则是64位JDK,否则是32位JDK(注意:JDK的位数和服务器的位数不是同一个概念,32位服务器只能装32位JDK,64位服务器可能装64位JDK,也可能装32位JDK)。
- 如果是32位JDK,将32位的librxtxSerial.so放入
$JAVA_HOME/jre/lib/i386
目录下,如果是64位JDK,将64位的librxtxSerial.so放入$JAVA_HOME/jre/lib/amd64
目录下。
Windows则复制rxtxSerial.dll 到%JAVA_HOME%/jre/bin/
。 - 项目lib引入jSMSEngine.jar和RXTXComm.jar(注意:32位的so是RXTX-2.1-7pre20版本,64位的so是RXTX-2.2-pre2版本,RXTXComm.jar只能向前兼容,否则低版本的jar调用高版本的so会报nativeGetVersion的异常)。
如此环境便已搭建好,只需调用接口发送短信即可。
jSMSEngine短信猫案例代码
基于jSMSEngine做了封装,只暴露出简单的短信发送接口,并且将短信猫的配置参数从properties配置文件读取,有兴趣的朋友可从GitHub上下载下来玩玩。
GitHub地址:https://github.com/Airch/jSMSEngineWebPro
坑
windows上短信发送正常,linux上则发不出去,等了很长时间后报GSM device is not responding
异常。
解决步骤:
1、换线,将短信猫配的usb转串口线换成PL2303,淘宝上有,买过来换上,该线兼容性较好;
2、改源码,jSMSEngine开源包里需要将CSerialDriver.java
的第88行改成
serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
这样就可以解决windows上可以发送成功而linux失败的问题。
3、打包,最后为了方便,可以将修改后的jSMSEngine的源码重新打成jar包,打包之前需要线解决CGSMAlphabets.java
的乱码问题,否则项目依赖该包运行时也会报错,可以用其他工具打开该文件,如sublime,该工具内显示正常不乱码,从sublime里复制该类的内容到eclipse里就会显示正常,然后执行export-->jar file
。