短信猫(GSM MODEM)linux64_Java开发指南
**开发所需文件**:
smslib-3.5.3.jar 短信猫二次开发包(可前往http://smslib.org官网下载最新版本)
log4j-1.2.14.jar 打印日志使用(版本不限)
RXTXcomm.jar 串口通讯Java类库(可前往http://rxtx.qbang.org官网下载适用版本)
librxtxSerial.so 动态链接库文件
注:这里使用的RXTXcomm.jar和librxtxSerial.so两个文件版本需一致(本人2009/2/5 64位)
** 开整 **
1、先配置环境(本人使用jdk-8u144-linux-x64.tar.gz)
将RXTXcomm.jar 文件放至 /jdk1.8.0_144/jre/lib/ext目录下
将librxtxSerial.so 文件放至 /jdk1.8.0_144/jre/lib/amd64 目录下
2、项目导入依赖jar包
将smslib-3.5.3.jar和log4j-1.2.14.jar 两个开发依赖包导入项目(这个都会的哈)
3、短信猫设备连接虚拟机/服务器
将短信猫设备通过USB/串口 连接到本机/服务器
查看是否连接(虚拟机CentOS 7):
a:虚拟机右下角USB设备图标为蓝色连接状态
b:查询设备串口号:ls /dev 查看有没有ttyUSB0的串口
注:若没有ttyUSB0可先拔掉设备查询再插上查询-先后查询对比(一般为ttyUSB0)
1、配置串口
下载串口通讯工具(minicom)
minicom需要ncurses库的支持,否则安装会有问题。
a:下载ncurses (本人ncurses-6.0.tar.gz)
下载链接:http://ftp.gnu.org/pub/gnu/ncurses/
上传至虚拟机
解压 --> 执行# tar -zxvf ncurses-6.0.tar.gz -C 可选择存放目录/ncurses/
配置 --> 在ncurses/ncurses-6.0目录下执行# ./configure
编码 --> 执行# make
安装 --> 执行# make install
b:下载minicom (本人 minicom-2.7.1.tar.gz)
下载链接:https://fossies.org/linux/misc/minicom-2.7.tar.gz
上传至虚拟机
解压 --> 执行# tar -zxvf minicom-2.7.1.tar.gz -C 可选择存放目录/minicom /
配置 --> 在minicom/minicom-2.7.1目录下执行# ./configure
编码 --> 执行# make
安装 --> 执行# make install
c:配置minicom串口
执行# minicom -s 进入窗口选择Serial port setup
依次修改A、E、F为下图:
保存:
退出:
5、编写测试程序
package com.ultrapower.sms; import org.smslib.helper.CommPortIdentifier; import org.smslib.helper.SerialPort; import java.io.*; import java.util.Enumeration; public class CommTest { static CommPortIdentifier portId; static Enumeration portList; static int bauds[] = { 9600, 19200, 57600, 115200 }; public static void main(String[] args) { portList = CommPortIdentifier.getPortIdentifiers(); System.out.println("金笛短信设备端口连接测试..."); while (portList.hasMoreElements()) { portId = (CommPortIdentifier) portList.nextElement(); if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { System.out.println("找到串口: " + portId.getName()); for (int i = 0; i < bauds.length; i++) { System.out.print(" Trying at " + bauds[i] + "..."); try { SerialPort serialPort; InputStream inStream; OutputStream outStream; int c; String response; serialPort = (SerialPort) portId.open("SMSLibCommTester", 1971); serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN); serialPort.setSerialPortParams(bauds[i], SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); inStream = serialPort.getInputStream(); outStream = serialPort.getOutputStream(); serialPort.enableReceiveTimeout(1000); c = inStream.read(); while (c != -1) { c = inStream.read(); } outStream.write('A'); outStream.write('T'); outStream.write('\r'); try { Thread.sleep(1000); } catch (Exception e) { } response = ""; c = inStream.read(); while (c != -1) { response += (char) c; c = inStream.read(); } if (response.indexOf("OK") >= 0) { try { System.out.print(" 获取设备信息..."); outStream.write('A'); outStream.write('T'); outStream.write('+'); outStream.write('C'); outStream.write('G'); outStream.write('M'); outStream.write('M'); outStream.write('\r'); response = ""; c = inStream.read(); while (c != -1) { response += (char) c; c = inStream.read(); } System.out.println(" 发现设备: " + response.replaceAll("\\s+OK\\s+", "").replaceAll("\n", "").replaceAll("\r", "")); } catch (Exception e) { System.out.println(" 没有发现设备!"); } } else { System.out.println(" 没有发现设备!"); }; serialPort.close(); } catch (Exception e) { System.out.println(" 没有发现设备!"); } } } } } }
打成jar包上传虚拟机执行--》结果为:--》
6、编写发送短信程序
package com.ultrapower.sms; import org.smslib.Message; import org.smslib.OutboundMessage; import org.smslib.Service; import org.smslib.modem.SerialModemGateway; import java.time.LocalDateTime; public class SendGsm { public static boolean SMSReminds(String phone, String content) throws Exception{ // 1、连接网关的id // 2、com口名称,如COM1或/dev/ttyS1(根据实际情况修改 // 3、串口波特率,如9600(根据实际情况修改) // 4、开发商 // 5、型号 SerialModemGateway gateway = new SerialModemGateway("model.com3", "/dev/ttyUSB0", 9600, "SIEMENS","HT-S3100"); // 设置true,表示该网关可以接收短信 gateway.setInbound(true); // 设置true,表示该网关可以发送短信 gateway.setOutbound(true); // -----------------创建发送短信的服务(它是单例的)---------------- Service service = Service.getInstance(); Service.getInstance().S.SERIAL_POLLING = true; boolean result; try { // ---------------------- 将设备加到服务中---------------------- service.addGateway(gateway); // ------------------------- 启动服务 ------------------------- service.startService(); // ------------------------- 发送短信 ------------------------- OutboundMessage msg = new OutboundMessage(phone , content); msg.setEncoding(Message.MessageEncodings. ENCUCS2); System.out.println("startDate====="+ LocalDateTime.now().toString()); result = service.sendMessage(msg); System.out.println("endDate====="+ LocalDateTime.now().toString()); // ------------------------- 关闭服务 ------------------------- service.stopService(); service .removeGateway(gateway); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); service.stopService(); service .removeGateway(gateway); return false; } return result; } public static void main(String[] args) { try { boolean sendResult = SMSReminds("17631357071", "Java发送短信--测试短信猫-验证码 123456"); System.out.println("sendResult = [" + sendResult + "]"); } catch (Exception e) { e.printStackTrace(); } } }
打成jar包上传虚拟机执行--》结果为:--》
完成!