利用短信猫发送短信教程&解决windows上发送成功而linux上失败问题

2019-07-13 08:33发布

class="markdown_views prism-atom-one-light">

前言

目前用过的开源短信猫工具有jSMSEngine和SMSLib,下载地址及使用网上有很多,本文只是简要介绍短信猫的安装使用及在项目中遇到的坑。
说明:本文主要解决windows上通过短信猫发送成功而Linux上发送失败的问题。
通过短信猫发送短信案例GitHub地址:https://github.com/Airch/jSMSEngineWebPro

安装部署

  1. Linux系统 2.6.18以上内核已自带usb转串口驱动,所以一般情况下不需要安装驱动。
  2. 将usb短信猫插入服务器usb口,使用dmesg命令查看,出现以下信息则说明系统已经识别出短信猫,接口为/dev/ttyUSB0 (注意:如果USB接口被其他设备占用,识别出的接口可能不一样,一般是ttyUSB0或者ttyUSB1)
    这里写图片描述
    亦可使用命令:ls /dev/ttyUSB*,或lsusb检查系统是否识别出短信猫。
  3. 查看服务器jdk安装版本,使用java –version命令,如果显示结果中带64-Bit字样,则是64位JDK,否则是32位JDK(注意:JDK的位数和服务器的位数不是同一个概念,32位服务器只能装32位JDK,64位服务器可能装64位JDK,也可能装32位JDK)。
  4. 如果是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/
  5. 项目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