短信猫(GSM MODEM)win64_Java开发指南

13 篇文章 0 订阅

**开发所需文件**:

smslib-3.5.3.jar 短信猫二次开发包(可前往http://smslib.org官网下载最新版本)

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

RXTXcomm.jar 串口通讯Java类库(可前往http://rxtx.qbang.org官网下载适用版本)

rxtxSerial.dllrxtxParallel.dll 动态链接库文件

** 开整 **

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

RXTXcomm.jar 文件放至 \jdk1.8.0_131\jre\lib\ext目录下

rxtxSerial.dllrxtxParallel.dll 文件放至 \jdk1.8.0_131\jre\bin 目录下

2、项目导入依赖jar包

smslib-3.5.3.jarlog4j-1.2.14.jar 两个开发依赖包导入项目(这个都会的哈)

3、短信猫设备连接电脑

将短信猫设备通过USB/串口 连接到电脑

查看是否连接(Win7系统):

win+R-->系统属性-->设备管理器-->端口

注:图中的( COM3 )为串口号

4、编写测试程序

package com.zxl.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.zxl.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();
        }
    }
}

执行结果为:--》

完成!

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
:又称GSM MODEMGSM,无线模块,GSM模块,设备。根据集成模块的个数不同,又分为单池两种。 是什么?其实是一种支持GSM无线通讯的工业级调制解调器,一般基于法国WAVECOM或德国SIEMENS(西门子)GSM模块,插入国内移动通运营商的SIM卡后即可接入运营商GSM网络,实现无线GSM通话、、数据等功能。与手机相比,实际上核心模块一致,只是手机多了屏幕、键盘以及软件界面支持,而是在PC上通过串口通讯用AT指令去控制的,但两者能完成的收发功能是完全相同的。 随着手机及的普及,越来越多的行业开始发展企业应用,设备凭借其低成本、稳定可靠的点对点通、方便快捷接入的优势已经成为企业领域重要的接入方式之一。中德福林依托其强大的研发实力、多年的无线通经验,推出了一系列产品,除了原装正版的WAVECOM GSM MODEM,自身更是研发了多种型号的设备,基本上基于WAVECOM核心模块,接口包括串口(RS232)、USB接口、PCI接口、网口等,并提供一系列开发包及示例程序,支持VC/VC++/VB/DELPHI/PB/C#/.NET/ASP/JAVA/JSP二次开发设备二次开发接口 基于开发行业应用,软件开发商可以采取以下三种方式: 直接使用AT指令:基于串口通讯模式使用AT指令直接操作,这是最底层的开发模式,但是我们建议客户尽量不采用此方法,因为这种方式需要对的AT指令及特性非常熟悉。 二次开发包:厂商针对软件开发应用提供的二次开发包,其底层是基于的AT指令,对于软件开发商只需要调用二次开发包或者控件中的API即可。基于多年的开发经验,为客户提供一套基于动态链接库(DLL)技术的开发包,可以支持所有的 WINDOWS 环境下开发工具,也提供支持 JAVA 开发的 JAR 包。 中间件:这是我们独家提供的基于数据库接口的服务器软件,软件开发商只需要提交队列到数据库里即可,开发简单快速,节约人力成本,是最佳的应用开发接口模式。 的优势 基于建立行业应用,具有如下优势: 投入低:无需购置接入服务器,只需购置经济的设备; 安装维护方便:设备容易安装,维护手段简便易用; 安全性好:服务采用自服方式,不需经第三方,息保密,整个应用都在企业的控制之内; 用户覆盖面广:该服务能通过不同运营商的中心发送或接收息,兼容移动、联通的所有手机用户以及电、网通的所有小灵通用户; 可靠性高:采用点对点的发送方式,优先级别高,稳定性好; 系统容量可扩展:通过简单添加通模块就可以扩充系统容量; 业务开展自由:业务内容不受运营商限制,可以根据企业的具体需求进行业务和应用的定制; 接入门槛低:无需和运营商、服务提供商进行繁琐的商务谈判,只需一台就可以迅速构建企业自己的服务系统。 直 销 网 产 品 简 介 欢迎由此查看本网产品规范及技术指标 ,一般也叫做GSM MODEM,从英文名翻译过来,其实就是支持GSM制式通讯的调制解调器。所以,还有很多别称,如GSM,无线模块,GSM模块等。因为大部分客户都是拿着GSM MODEM去收发,也就是在行业应用市场上,GSM MODEM最大的用途是用来收发,因此,大多数人还是称之为是什么?其实是一种支持GSM无线通讯的工业级调制解调器,一般基于法国WAVECOM或德国SIEMENS(西门子)GSM模块,插入国内移动通运营商的SIM卡后即可接入运营商GSM网络,实现无线GSM通话、、数据等功能。 GSM MODEM)的核心模块实际上就是手机的核心模块。当接通电源以后,GSM MODEM的内置软件就开始工作,如果您插入了某个移动运营商的SIM卡,GSM MODEM便完全就和手机一样接入到移动通网络中去了。与此同时,计算机可以通过串口或USB连接GSM MODEM,通过一套AT指令,便可以操作GSM MODEM,例如收发。其实也可以拨打电话、收发传真等等,只是我们一般没有必要使用这些多余功能。因此GSM MODEM)与手机的最大区别在于手机自带屏幕、键盘、应用软件,而相当于一个处于黑箱操作的手机,需要计算机去驱动和控制。 GSM MODEM)的分类:按照与计算机的不同接口,可分为串口、USB接口、PCI接口、网口等。按照模块数的多少,可分为单口池两种。池其实就是将多个模块集成到一起通过多串口或者网口与计算机形成多串口通讯,从而实现多个模块并发的设备。按照无线网络制式的不同,又可分为GSM、CDMA和小灵通开发接口(GSM MODEM SDK),基于开发行业应用,软件开发商可以采取以下四种方式:1、直接使用AT指令,基于串口通讯模式使用AT指令直接操作,这是最底层的开发模式,基本上无论是哪种接口的,其实质还是通过GSM MODEM的串口通讯AT指令来驱动的。2、开发包:厂商针对软件开发应用提供的二次开发包,其底层是基于的AT指令,对于软件开发商只需要调用二次开发包或者控件中的API即可。3、中间件:这是一套的基于数据库接口的软件,用户只需提交队列到数据库即可进行收发。因此无论您用的是哪种开发语言,只要您能读写数据库即可。这种开发简单快速,节约人力成本,是最快捷的一种应用开发模式。4、直接使用由第三方提供的网关:这时其实已经没有必要再购买了(因为网关公司已经替您配备了类似设备),用户只需按照网关说明直接调用网关接口,系统就会自动实现收发。网关公司的网址为:SmsGate.CN。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值