您的位置:首页 > 运维架构 > Linux

短信猫(GSM MODEM)linux64_Java开发指南

2017-12-27 10:57 330 查看
短信猫(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包上传虚拟机执行--》结果为:--》



完成!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  短信 linux gsm Java