1, 拷贝底层串口依赖的librxtxSerial.so到JDK安装路径
cp librxtxSerial.so /usr/java/{0}/jre/lib/{1}

# {0}: JDK的基础目录,例如: jdk1.7.0_55; {1}: 处理器名称,例如: amd64,i386

2, 在工程中添加RXTXcomm.jar, smslib-3.5.1.jar

librxtxSerial.so和RXTXcomm.jar下载地址:http://rxtx.qbang.org
smslib-3.5.1.jar可以从Maven中下载依赖

3, 测试code
package com.smsmanager.singleInstall;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.smslib.AGateway;
import org.smslib.IOutboundMessageNotification;
import org.smslib.Message.MessageEncodings;
import org.smslib.OutboundMessage;
import org.smslib.Service;
import org.smslib.modem.SerialModemGateway;

import com.common.constant.SMSProperties;

public class ServiceFactory
{
private static Logger logger = LoggerFactory.getLogger(ServiceFactory.class);

/**
* 创建串口设备,如果有多个,就创建多个 参数说明:
* 1、你自己连接网关的id,名称好像是没有约束,自己随便定义
* 2、com口名称,如COM1或/dev/ttyS1(根据实际情况修改),可使用ComTone.java程序获取
* 3、串口波特率,如9600(根据实际情况修改),可使用ComTone.java程序获取
* 4、短信猫厂商,如Apple,可置为空
* 5、短信猫型号,如iphone4s,可置为空
*/
private static SerialModemGateway gateway;

/**
* 启动的发送短信Service,设为静态变量,打开服务后就不关闭,实现连续发短信
*/
private static Service srv;

static
{
init();
}

public static void init()
{

// 设置端口与波特率
gateway = new SerialModemGateway(SMSProperties.SERIALMODEMGATEWAY_ID, SMSProperties.SERIALMODEMGATEWAY_COMPORT,
SMSProperties.SERIALMODEMGATEWAY_BAUDRATE, SMSProperties.SERIALMODEMGATEWAY_MANUFACTURER, SMSProperties.SERIALMODEMGATEWAY_MODEL);
gateway.setInbound(true);
gateway.setOutbound(true);

srv = Service.getInstance();
srv.setOutboundMessageNotification(new OutboundNotification());
try
{
srv.addGateway(gateway);
// 启用轮循模式
srv.S.SERIAL_POLLING = true;
logger.info("短信猫准备开启服务.");
srv.startService();
logger.info("短信猫服务启动成功.");
}
catch (Exception e)
{
logger.error("短信猫启动失败,原因:", e);
}
}

public static class OutboundNotification implements IOutboundMessageNotification
{
public void process(AGateway gateway, OutboundMessage msg)
{
logger.debug(msg.getText() + "已发送。");
}
}

/**
* 给特定短信号码数组发送短信
*
* @param phones 短信号码数组
* @param content 发送短信内容
*/
public static boolean sendSmsInfo(String phone, String content)
{
boolean isSendSuc = false;
if (null == srv)
{
return isSendSuc;
}
try
{
OutboundMessage msg;

msg = new OutboundMessage(phone, content);
// 中文
msg.setEncoding(MessageEncodings.ENCUCS2);
isSendSuc = srv.sendMessage(msg);

}
catch (Exception e)
{
logger.info(content + "发送失败,具体原因:", e);
}

return isSendSuc;
}

public static boolean stopService()
{
boolean result = false;
try
{
srv.stopService();// 关闭服务
srv.removeGateway(gateway);
srv = null;
gateway = null;

result = true;
}
catch (Exception e)
{
logger.error("短信猫关闭失败,原因:", e);
}

return result;
}

public static void restartService()
{
stopService();
init();
}

}

4,FAQ
4.1,异常:org.smslib.GatewayException: GSM Network Auto-Registration disabled!
解释: 无法正常链接gsm网络

原因1:SIM卡没插好
解决1:请重新插卡

原因2:SIM卡没钱了
解决2:请查看账户余额,或打电话试试

原因3:周围的网络信号不强,导致SIM卡无法连接到网络
解决3:请使用自己的手机进行移动信号强度测试

4.2,异常:org.smslib.GatewayException: GSM: Invalid CREG response.
at org.smslib.modem.AModemDriver.waitForNetworkRegistration(AModemDriver.java:459)
at org.smslib.modem.AModemDriver.connect(AModemDriver.java:165)
at org.smslib.modem.ModemGateway.startGateway(ModemGateway.java:186)
at org.smslib.Service$1Starter.run(Service.java:257)

1,是 sim 卡出问题了。GSM: Invalid CREG response. 卡得不到响应。

4.3,异常:org.smslib.TimeoutException: No response from device.
at org.smslib.modem.AModemDriver$CharQueue.get(AModemDriver.java:531)
at org.smslib.modem.AModemDriver.getResponse(AModemDriver.java:329)
at org.smslib.modem.athandler.ATHandler.getSimStatus(ATHandler.java:132)
at org.smslib.modem.AModemDriver.connect(AModemDriver.java:129)
at org.smslib.modem.ModemGateway.startGateway(ModemGateway.java:186)
at org.smslib.Service$1Starter.run(Service.java:257)
解释:不可以长时间的占用端口,在一定时间之后应该及时的释放端口和资源

原因1:端口可能未正常打开
解决1:请重新打开端口

原因2:可能使用远程连接,选项中的 本地资源中端口被全部勾上了
解决2:请去除本地资源的勾选

Linux系统中调用短信猫发送短信(笔记)的更多相关文章

  1. java 短信猫发送短信的方法

    用java实现短信收发的功能,目前一般项目中短信群发功能的实现方法大致有下面三种: ·                 1. 向运行商申请短信网关,不需要额外的设备,利用运行商提供的API调用程序发送 ...

  2. 使用短信猫发送短信java代码

    短信猫简单配置:https://www.cnblogs.com/Big-Boss/p/9699880.html 发送短信: package utils; import org.smslib.AGate ...

  3. 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案

    方案特点: 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案,简化软件开发流程,减少各应用系统相同模块的重复开发工作,提高系统稳定性和可靠性. 基于HTTP协议的开发接口 使用特点在网页 ...

  4. 在 Linux 系统中安装Load Generator ,并在windows 调用方法

    在 Linux 系统中安装Load Generator ,并在windows 调用 由于公司需要测试系统的最大用户承受能力,所以需要学习使用loadrunner.在安装的时候碰到了不少问题,所以写下此 ...

  5. 在 Linux 系统中安装Load Generator ,并在windows 调用

    原文地址:http://www.blogjava.net/qileilove/archive/2012/03/14/371861.html 由于公司需要测试系统的最大用户承受能力,所以需要学习使用lo ...

  6. Linux 系统中僵尸进程

    Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动.僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸.配图源 ...

  7. 用户管理 之 Linux 系统中的超级权限的控制

    在Linux操作系统中,root的权限是最高的,也被称为超级权限的拥有者.普通用户无法执行的操作,root用户都能完成,所以也被称之为超级管理用户. 在系统中,每个文件.目录和进程,都归属于某一个用户 ...

  8. .NET 微信开放平台接口(接收短信、发送短信)

    .NET 微信开放平台接口(接收短信.发送短信) 前两天做个项目用到了微信api功能.项目完成后经过整理封装如下微信操作类. 以下功能的实现需要开发者已有微信的公众平台账号,并且开发模式已开启.接口配 ...

  9. linux系统中的进程状态分析

    转载地址:https://blog.csdn.net/shenwansangz/article/details/51981459 linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序, ...

随机推荐

  1. C函数原理

    C语言作为面向过程的语言,函数是其中最重要的部分,同时函数也是C种的一个难点,这篇文章希望通过汇编的方式说明函数的实现原理. 栈结构与相关的寄存器 在计算中,栈是十分重要的一种数据结构,同时也是CPU ...

  2. python实现单例模式

    有这么一种场景,我们把数据封装到类体或类的某个方法里,然而我们new出这个类只是为了拿到这部分数据,那么当多次这样调用的时候,每次都来拿数据并放到内存中大大浪费了内存. 那我们就可以想,我们拿到一次数 ...

  3. ABAP开发人员未来应该学些什么

    2007年1月我大学毕业进入SAP Chengdu从事开发工作,到今天已经整整11年了. 这张图在ABAP开发圈子里曾广为流传: 为了避免这种窘境发生在ABAPer身上,我们应该做点什么呢? 2017 ...

  4. Nginx配置反向代理

    Nginx可做web服务器,也可做负载均衡使用. 反向代理:应用服务器不直接提供服务,通过nginx服务器处理请求, 转发到代理服务器(Tomcat,Nginx,Apache等) 获取响应交给客户端, ...

  5. Zabbix Agent for Windows部署(五)

    一.环境介绍 二.软件准备 1.Zabbix官方下载地址:https://www.zabbix.com/download进入Zabbix pre-compiled agents项,下载相应版本 2.将 ...

  6. Zabbix实战-简易教程(8)--添加item

    一.术语 1.1 Item概念 Item是从主机里面获取的所有数据.通常情况下 item称为监控项,例如我们host加入了 zabbix 监控,我们需要监控它的内存.CPU信息,那么获取的CPU或内存 ...

  7. Java与算法之(8) - 堆排序

    堆是一种特殊的完全二叉树,其特点是所有父节点都比子节点要小,或者所有父节点都比字节点要大.前一种称为最小堆,后一种称为最大堆. 比如下面这两个: 那么这个特性有什么作用?既然题目是堆排序,那么肯定能用 ...

  8. 【Java学习笔记之十四】Java中this用法小节

    用类名定义一个变量的时候,定义的只是一个引用,外面可以通过这个引用来访问这个类里面的属性和方法. 那们类里面是够也应该有一个引用来访问自己的属性和方法纳? 呵呵,JAVA提供了一个很好的东西,就是 t ...

  9. HDU2243 考研路茫茫――单词情结

    Description 背单词,始终是复习英语的重要环节.在荒废了3年大学生涯后,Lele也终于要开始背单词了. 一天,Lele在某本单词书上看到了一个根据词根来背单词的方法.比如"ab&q ...

  10. Gym 100952J&&2015 HIAST Collegiate Programming Contest J. Polygons Intersection【计算几何求解两个凸多边形的相交面积板子题】

    J. Polygons Intersection time limit per test:2 seconds memory limit per test:64 megabytes input:stan ...