天天看點

短信貓(GSM MODEM)win64_Java開發指南

**開發所需檔案**:

短信貓(GSM MODEM)win64_Java開發指南

smslib-3.5.3.jar 短信貓二次開發包(可前往http://smslib.org官網下載下傳最新版本)

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

RXTXcomm.jar 序列槽通訊Java類庫(可前往http://rxtx.qbang.org官網下載下傳适用版本)

rxtxSerial.dll和rxtxParallel.dll 動态連結庫檔案

** 開整 **

1、先配置環境(本人使用jdk1.8.0_131)

将RXTXcomm.jar 檔案放至 \jdk1.8.0_131\jre\lib\ext目錄下

将rxtxSerial.dll和rxtxParallel.dll 檔案放至 \jdk1.8.0_131\jre\bin 目錄下

2、項目導入依賴jar包

将smslib-3.5.3.jar和log4j-1.2.14.jar 兩個開發依賴包導入項目(這個都會的哈)

3、短信貓裝置連接配接電腦

将短信貓裝置通過USB/序列槽 連接配接到電腦

檢視是否連接配接(Win7系統):

win+R-->系統屬性-->裝置管理器-->端口

短信貓(GSM MODEM)win64_Java開發指南

注:圖中的( COM3 )為序列槽号

4、編寫測試程式

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("  沒有發現裝置!");
                    }
                }
            }
        }
    }
}
      

執行結果為:--》

短信貓(GSM MODEM)win64_Java開發指南

5、編寫發送短信程式

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", "COM3", 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();
        }
    }
}
      

執行結果為:--》

短信貓(GSM MODEM)win64_Java開發指南

完成!