Tech Corner
[Reserved] Java call SMSLib send SMS text messages using single-port Cat Comments
SMSLib Apache is an open source project
to send text messages in several ways:
1, apply to the local carrier gateway does not require additional equipment to send text messages using the API call other procedures provided for large communications companies. Stability, speed, suitable for the needs of particularly large amount of text messages, need to be connected to the operator's network, does not fit within the network project.
2, SMS cat send SMS , GSM MODEM device by means such as, to send text messages via a data line connected to the computer, this method is more suitable for smaller companies and individuals. You do not need networking, slow, it simply is invoked by text message cat equipment texting, texting card price to see the package, suitable for small projects.
SMS cat send text messages device
3, the Internet messaging platforms, made by a professional on the internet site generation of messaging texting data, dependent on the site is too high, speed, price Choice SMS platform, the platform for some fast speed, stable but the price is high. Not fit within the network project.
4, network messaging platforms, SMS cat and in fact no difference, that is, separate the text messaging function to make a product, there are dozens of cards at the same time support even hair products, speed is not slow, SMS load are doing very well, we own the company also has a similar product, but relatively large, cumbersome installation, these products are usually more expensive prices.
package com.piaohan.sms;
import org.smslib.Message.MessageEncodings;
import org.smslib.OutboundMessage;
import org.smslib.Service;
import org.smslib.modem.SerialModemGateway;
public class SMSDemo {
<span class="hljs-function"><span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">public</span> <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">static</span> <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">void</span> <span class="hljs-title" style="color: rgb(136, 0, 0); font-weight: bold;">main</span><span class="hljs-params">(String args[])</span> <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">throws</span> Exception </span>{
<span class="hljs-comment" style="color: rgb(136, 136, 136);">// ---------------创建串口设备,如果有多个,就创建多个--------------</span>
<span class="hljs-comment" style="color: rgb(136, 136, 136);">// 1、你自己连接网关的id</span>
<span class="hljs-comment" style="color: rgb(136, 136, 136);">// 2、com口名称,如COM1或/dev/ttyS1(根据实际情况修改)</span>
<span class="hljs-comment" style="color: rgb(136, 136, 136);">// 3、串口波特率,如9600(根据实际情况修改)</span>
<span class="hljs-comment" style="color: rgb(136, 136, 136);">// 4、开发商,如Apple</span>
<span class="hljs-comment" style="color: rgb(136, 136, 136);">// 5、型号,如iphone4s</span>
SerialModemGateway gateway = <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">new</span> SerialModemGateway(<span class="hljs-string" style="color: rgb(136, 0, 0);">"SMS"</span> , <span class="hljs-string" style="color: rgb(136, 0, 0);">"COM3"</span>,
<span class="hljs-number" style="color: rgb(136, 0, 0);">9600</span>, <span class="hljs-string" style="color: rgb(136, 0, 0);">""</span>, <span class="hljs-string" style="color: rgb(136, 0, 0);">""</span>);
gateway.setInbound( <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">true</span>); <span class="hljs-comment" style="color: rgb(136, 136, 136);">// 设置true,表示该网关可以接收短信</span>
gateway.setOutbound( <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">true</span>); <span class="hljs-comment" style="color: rgb(136, 136, 136);">// 设置true,表示该网关可以发送短信</span>
<span class="hljs-comment" style="color: rgb(136, 136, 136);">// -----------------创建发送短信的服务(它是单例的)----------------</span>
Service service = Service. getInstance();
<span class="hljs-comment" style="color: rgb(136, 136, 136);">// ---------------------- 将设备加到服务中----------------------</span>
service.addGateway(gateway);
<span class="hljs-comment" style="color: rgb(136, 136, 136);">// ------------------------- 启动服务 -------------------------</span>
service.startService();
<span class="hljs-comment" style="color: rgb(136, 136, 136);">// ------------------------- 发送短信 -------------------------</span>
OutboundMessage msg = <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">new</span> OutboundMessage(<span class="hljs-string" style="color: rgb(136, 0, 0);">"187xxxxxxxx"</span> , <span class="hljs-string" style="color: rgb(136, 0, 0);">"Hello World"</span>);
msg.setEncoding(MessageEncodings. ENCUCS2);
service.sendMessage(msg);
<span class="hljs-comment" style="color: rgb(136, 136, 136);">// ------------------------- 关闭服务 -------------------------</span>
service.stopService();
}
}
代码不多,但是第一次弄这个时候搞了好久,碰到的问题不少,主要在于串口配置那,串口名称,波特率不知道,其实windows下可以通过“设备管理器”来查看。
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
/**
-
CommTest 检测端口
/
public class ComTone {
/* 常见端口波特率 */
public static int bauds[] = { 9600, 19200, 57600, 115200 };@SuppressWarnings( “unchecked” )
public static void main(String[] args) {Enumeration<CommPortIdentifier> portList = CommPortIdentifier . getPortIdentifiers(); <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">long</span> st = System. currentTimeMillis(); System. out.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">println</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">"短信设备端口连接测试..."</span> ); <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">while</span> (portList.hasMoreElements()) { CommPortIdentifier portId = (CommPortIdentifier) portList .nextElement(); <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">if</span> (portId.getPortType() == CommPortIdentifier.PORT_SERIAL ) { System. out.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">println</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">"找到串口:"</span> + portId.getName() + <span class="hljs-string" style="color: rgb(136, 0, 0);">"\t类型:"</span> + getPortTypeName(portId.getPortType())); <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">for</span> ( <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">int</span> i = <span class="hljs-number" style="color: rgb(136, 0, 0);">0</span>; i < bauds. length; i++) { System. out.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">print</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">" Trying at "</span> + bauds [i] + <span class="hljs-string" style="color: rgb(136, 0, 0);">"..."</span> ); <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">try</span> { SerialPort serialPort; InputStream inStream; OutputStream outStream; <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">int</span> c; String response; serialPort = (SerialPort) portId.open( <span class="hljs-string" style="color: rgb(136, 0, 0);">"SMSLibCommTester"</span> , <span class="hljs-number" style="color: rgb(136, 0, 0);">1000</span>); 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(<span class="hljs-number" style="color: rgb(136, 0, 0);">1000</span>); c = inStream.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">read</span>(); <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">while</span> (c != -<span class="hljs-number" style="color: rgb(136, 0, 0);">1</span>) c = inStream.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">read</span>(); outStream.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">write</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">'A'</span>); outStream.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">write</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">'T'</span>); outStream.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">write</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">'\r'</span>); <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">try</span> { Thread. sleep(<span class="hljs-number" style="color: rgb(136, 0, 0);">1000</span>); } <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">catch</span> (Exception e) { } response = <span class="hljs-string" style="color: rgb(136, 0, 0);">""</span>; c = inStream.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">read</span>(); <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">while</span> (c != -<span class="hljs-number" style="color: rgb(136, 0, 0);">1</span>) { response += ( <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">char</span>) c; c = inStream.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">read</span>(); } <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">if</span> (response.indexOf( <span class="hljs-string" style="color: rgb(136, 0, 0);">"OK"</span> ) >= <span class="hljs-number" style="color: rgb(136, 0, 0);">0</span>) { <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">try</span> { System. out.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">print</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">" 获取设备信息..."</span> ); outStream.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">write</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">'A'</span>); outStream.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">write</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">'T'</span>); outStream.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">write</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">'+'</span>); outStream.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">write</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">'C'</span>); outStream.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">write</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">'G'</span>); outStream.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">write</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">'M'</span>); outStream.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">write</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">'M'</span>); outStream.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">write</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">'\r'</span>); response = <span class="hljs-string" style="color: rgb(136, 0, 0);">""</span>; c = inStream.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">read</span>(); <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">while</span> (c != -<span class="hljs-number" style="color: rgb(136, 0, 0);">1</span>) { response += ( <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">char</span>) c; c = inStream.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">read</span>(); } System. out.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">println</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">" 发现设备: "</span> + response.replaceAll(<span class="hljs-string" style="color: rgb(136, 0, 0);">"\\s+OK\\s+"</span> , <span class="hljs-string" style="color: rgb(136, 0, 0);">""</span>) .replaceAll(<span class="hljs-string" style="color: rgb(136, 0, 0);">"\n"</span> , <span class="hljs-string" style="color: rgb(136, 0, 0);">""</span>) .replaceAll(<span class="hljs-string" style="color: rgb(136, 0, 0);">"\r"</span> , <span class="hljs-string" style="color: rgb(136, 0, 0);">""</span>)); } <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">catch</span> (Exception e) { System. out.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">println</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">" 没有发现设备!"</span> ); } } <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">else</span> System. out.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">println</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">" 没有发现设备!"</span> ); serialPort.close(); } <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">catch</span> (Exception e) { System. out.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">println</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">" 没有发现设备!"</span> ); } } System. out.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">println</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">"找到串口: "</span> + portId.getName()); } } <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">long</span> et = System. currentTimeMillis(); <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">long</span> time = et - st; System. out.<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: 700;">println</span>( <span class="hljs-string" style="color: rgb(136, 0, 0);">"系统的试运行时间:"</span> + time + <span class="hljs-string" style="color: rgb(136, 0, 0);">"毫秒"</span> );
}
private static String getPortTypeName( int portType) {
switch (portType) {
case CommPortIdentifier. PORT_I2C :
return “I2C” ;
case CommPortIdentifier. PORT_PARALLEL :
return “Parallel” ;
case CommPortIdentifier. PORT_RAW :
return “Raw” ;
case CommPortIdentifier. PORT_RS485 :
return “RS485” ;
case CommPortIdentifier. PORT_SERIAL :
return “Serial” ;
default:
return “unknown type” ;
}
}
}运行结果如下:Finally, there is a place to note, the above code is to test all the code, if you really want into the project, it is best to maintain their own queue to send a message, because although the internal smslib send a message around about 5s, too many words there is a queue, but once the device error message if it is lost, if a multi-core device, but also consider the load balance issues and so on.
<div class="page">
<p>上一篇:<a href="/help/119.html">【转载】SMSLib开源短信猫二次开发包开发指南</a> </p>
<p>下一篇:<a href="/help/123.html">通过C#实现短信猫短信发送与接收</a> </p>
<a href="javascript:void(0);" title="返回" class="back" onclick="javascript:history.back(-1);">返回</a> </div>
</div>
</div>
</div>