**開發所需檔案**:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN0LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX3dmaOdXU61UenpnTzhmblZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zN1kTM1IjM4EjNyITM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
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-->系統屬性-->裝置管理器-->端口
注:圖中的( 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(" 沒有發現裝置!");
}
}
}
}
}
}
執行結果為:--》
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();
}
}
}
執行結果為:--》
完成!