短信"猫"可以实现无手机发送短信,和mas机比起来就是比较灵活点,不用那么多繁杂的步骤,下面来说说短信"猫"发短信的实现.
一般来说,对于信息的处理无外乎两种方式:一种是把任务保存到缓存队列中,然后去调度任务.优点就是速度快,缺点也很明显,如果任务处理的不好,很容出现任务无法执行或者等待.另一种就是保存到数据库中,短信发送和数据的处理分开处理,但是速度方面会有影响.这里说的第二种方法.
首先把任务的数据保存到数据库中,这块的话没有什么难度,就是普通的增删改查.
发送短信的单独分离出来运行,既web端和发送端分开.
首先需要初始化设备
public static void initDriver() {
if (!initDriver) {
initDriver = true;
String driverName = "com.sun.comm.Win32Driver";
String libname = "win32com";
CommDriver commDriver = null;
try {
System.loadLibrary("win32com");
log.info(libname + " Library Loaded");
commDriver = (CommDriver) Class.forName(driverName)
.newInstance();
commDriver.initialize();
log.info("comm Driver Initialized");
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
}
然后需要查找SMS设备
public static List<String> findSMS() {
TreeMap<String, String> portsMap = new TreeMap<String, String>();
log.info("GSM Modem 串行端口连接测试开始...");
Enumeration<?> en = CommPortIdentifier.getPortIdentifiers();
CommPortIdentifier portId;
while (en.hasMoreElements()) {
portId = (CommPortIdentifier) en.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
if (checkCommPortForSMS(portId.getName())) {
log.info(" 设备端口 : " + portId.getName() + " 满足短信发送要求");
portsMap.put(portId.getName(), portId.getName());
}
}
}
log.info("GSM Modem 检查结束 ...");
return new Vector<String>(portsMap.keySet());
}
public static boolean checkCommPortForSMS(String portName) {
portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL
&& portName.equals(portId.getName())) {
log.info("找到串口: " + portId.getName());
for (int i = 0; i < bauds.length; i++) {
log.info(" Trying at " + bauds[i] + "...");
try {
SerialPort serialPort;
InputStream inStream;
OutputStream outStream;
int c;
StringBuffer response = new StringBuffer();
serialPort = (SerialPort) portId.open(
"SMSLibCommTester", 2000);
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) {
log.error(e.getMessage(), e);
}
c = inStream.read();
while (c != -1) {
response.append((char) c);
c = inStream.read();
}
if (response.indexOf("OK") >= 0) {
log.info(" 正在检测设备:");
try {
outStream.write('A');
outStream.write('T');
outStream.write('+');
outStream.write('C');
outStream.write('G');
outStream.write('M');
outStream.write('M');
outStream.write('\r');
response = new StringBuffer();
c = inStream.read();
while (c != -1) {
response.append((char) c);
c = inStream.read();
}
log.info(" 发现设备: "
+ response.toString().replaceAll(
"(\\s+OK\\s+)|[\n\r]", ""));
if (!"ERROR".equals(response.toString()
.replaceAll("(\\s+OK\\s+)|[\n\r]", "")
.trim())) {
serialPort.close();
inStream.close();
outStream.close();
return true;
}
return false;
} catch (Exception e) {
log.info(" 检测设备失败,获取设备信息异常:" + e.getMessage());
}
} else {
log.info(" 检测设备失败,没有接收到响应结果!");
}
serialPort.close();
} catch (Exception e) {
log.info(" 检测设备失败,发生异常:" + e.getMessage());
}
}
}
}
return false;
}
调用结束后会返回当前计算机可用的端口号,然后就可以注册gateway了
for (String portId : ports) {
SerialModemGateway gateway = new SerialModemGateway(
"modem.MAGUS" + portId, portId, 9600, "wavecom", "");
gateway.setInbound(true);
gateway.setOutbound(true);
smsService.addGateway(gateway);
}
然后需要设置smsService的各种监听事件了.这些都搞定之后就可以设置一个while(true)循环去不停的读取数据库发送短信了,但是有一点,需要设置一个安全的线程去执行,同时还要添加同步锁.保证当前只有一个工作在进行.
网上有很多简单的方法,可以结合着学习.直接贴代码的话就没意思了.
分享到:
相关推荐
在实现短信发送功能后,需要编写测试用例来验证其正确性。这可能包括发送短信到一个已知的手机号码,检查是否能成功发送,以及是否能接收到正确的返回信息。同时,考虑到可能存在的网络延迟和短信中心的处理时间,...
Java短信猫收发短信的例子是基于Java编程语言实现的一个实用工具,主要用于与短信猫设备进行交互,实现短信的发送和接收功能。短信猫是一种硬件设备,通常通过USB或串口连接到计算机,使得电脑能够通过GSM网络发送和...
要实现短信发送功能,开发者需要解压文件,理解并运行`SendMessage.java`,同时根据`网上写得比较好的配置.txt`进行配置,确保已正确安装和导入`smslib-v3.5.2`和`javacomm20-win32`这两个库。对于Java开发者,特别...
Java短信猫项目是一种基于Java语言实现的短信发送与接收系统,它主要依赖于两个关键库:smslib-3.3.3.jar和log4j-1.2.13.jar。这个项目对于需要进行短信服务集成的企业或者开发者来说,是一个非常有价值的参考案例。...
总之,Java短信猫源码是通过Java语言实现的串口通信示例,它演示了如何控制短信猫设备进行短信发送,并且支持连续发送,是学习和开发相关应用的良好参考。在研究和使用这些源码时,应深入了解串口通信、AT命令集以及...
Java短信猫开发包源码是针对短信猫设备进行二次开发的工具,主要目的是为了通过编程方式控制短信猫发送和接收短信。短信猫是一种硬件设备,它能够连接到计算机并模拟手机的功能,允许用户通过电脑来收发短信。在Java...
Java短信猫发短信技术主要涉及Java编程语言与硬件设备——短信猫的交互,以及通过串行通信接口(串口)实现短信的发送和接收。在本文中,我们将深入探讨这一技术,包括短信猫的工作原理、Java如何操作串口以及相关的...
Java 实现短信猫发短信是一项常见的通信技术应用,主要用于企业或服务端系统向用户发送验证码、通知等。本文将深入探讨如何使用Java编程语言通过短信猫(GPRS Modem)来实现这一功能,并重点关注给定文件中的关键...
在实际应用中,开发者还需要处理各种异常情况,如串口通信失败、短信发送超时、PDU解析错误等。此外,为了提高效率和用户体验,还可能需要实现短信队列管理,批量发送等功能。 总结起来,通过Java实现基于短信猫的...
Java短信猫短信发送程序是一个基于Java语言开发的实用工具,主要用于实现系统中的短信提醒功能。在企业级应用中,这种功能常用于用户验证、订单通知、异常报警等场景,极大地提高了自动化处理和用户互动的效率。这个...
总之,通过Java和"comm.jar"库,我们可以实现与短信猫的串口通信,发送和接收短信,这在许多自动化场景中都非常实用,例如远程监控、报警系统或者设备控制等。在实际开发中,确保对硬件设备的理解和Java串口编程的...
本文将深入探讨如何利用短信猫进行短信的发送与接收功能的实现。 首先,我们要了解短信猫的工作原理。短信猫通常采用串行通信接口(如USB或RS232),连接到计算机或服务器。它内置SIM卡槽,可以插入运营商的SIM卡,...
由于业务的需要,今天用java实现了用短信猫收发短信的功能, 本来这个应该用随猫购买的二次开发接口实现的,但由于这几台猫买的时候,经销商没有提供二次开发接口,自己写了几个方法实现了发短信的功能。...
Java代码实现短信猫发送短信是一项常见的通信技术应用,主要用于企业级服务或自动化系统中的通知功能。短信猫(SMS Modem)是一种硬件设备,...通过理解和实践这些知识点,开发者可以构建出稳定可靠的短信发送系统。
5. 短信的编码格式,如7位ASCII、16位Unicode,以及它们在短信发送中的应用。 6. 错误处理和状态查询机制,确保程序的健壮性。 通过这个项目,开发者可以进一步提升其在嵌入式通信、物联网领域的技能,也能为需要...
这个"JAVA短信验证源码DEMO"提供了实现短信验证功能的基本框架,主要涉及Java编程语言和网络通信技术。以下是对该DEMO中核心知识点的详细解释: 1. **TCP/IP Socket通信**:TCP(Transmission Control Protocol)/...
标题中的“短信猫java,java集成短信接口”指的是在Java应用程序中使用短信猫设备来实现短信的发送功能。短信猫是一种硬件设备,它通过串行接口(如USB...通过理解和实践这个过程,开发者可以构建出可靠的短信发送系统。
Java 实现短信发送 Java 实现短信发送是指利用 Java 语言编写程序来实现服务器向手机发送短信的过程。在这里,我们将使用 Java 语言来实现这个功能,并且使用了 Apache 的 Commons HttpClient 库来发送 HTTP 请求。...