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

短信猫(GSM MODEMlinux64_Java开发指南

 

**开发所需文件**

短信猫(GSM MODEM)linux64_Java开发指南_第1张图片

smslib-3.5.3.jar 短信猫二次开发包(可前往http://smslib.org官网下载最新版本)

log4j-1.2.14.jar 打印日志使用(版本不限)

RXTXcomm.jar 串口通讯Java类库(可前往http://rxtx.qbang.org官网下载适用版本)

librxtxSerial.so 动态链接库文件

注:这里使用的RXTXcomm.jarlibrxtxSerial.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.jarlog4j-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

短信猫(GSM MODEM)linux64_Java开发指南_第2张图片

依次修改AEF为下图:

短信猫(GSM MODEM)linux64_Java开发指南_第3张图片

保存:

短信猫(GSM MODEM)linux64_Java开发指南_第4张图片

退出:

短信猫(GSM MODEM)linux64_Java开发指南_第5张图片

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包上传虚拟机执行--》结果为:--


短信猫(GSM MODEM)linux64_Java开发指南_第6张图片


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包上传虚拟机执行--结果为:--



完成!


你可能感兴趣的:(指南,java)