博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SMSLib实现Java短信收发的功能
阅读量:7208 次
发布时间:2019-06-29

本文共 3464 字,大约阅读时间需要 11 分钟。

hot3.png

   用java实现短信收发的功能,目前一般项目中短信群发功能的实现方法大致有下面三种:
  • 1、 向运行商申请短信网关,不需要额外的设备,利用运行商提供的API调用程序发送短信,适用于大型的通信公司。
  • 2、 借助像GSM MODEM之类的设备(支持AT指令的手机也行),通过数据线连接电脑来发送短信,这种方法比较适用于小公司及个人。要实现这种方式必须理解串口通信、AT指令、短信编码、解码。
  • 3、 借助第三方运行的网站实现,由网站代发短信数据,这种方法对网站依赖性太高,对网络的要求也比较高。
      
鉴于项目的情况和多方考虑,同时又找到了一个开源的SMSLib项目的支持,比较倾向于第二种方法,SMSLib的出现就不需要我们自己去写底层的AT指令,这样就可以直接通过调用SMSLib的API来实现通过GSM modem来收发送短信了。
SMSLib官方网站:,使用SMSLib的一些基本要点:
  • SUN JDK 1.6 or newer. (Java环境)
  • Java Communications Library. (Java串口通信)
  • Apache ANT for building the sources. (编译源码时需要的)
  • Apache log4j. (日志工具)
  • Apache Jakarta Commons - NET. (网络操作相关的)
  • JSMPP Library (SMPP协议时需要的)
有关Java串口通信需要补充说明:
  • window系统可以用SUN Java Comm v2. (该版本好像也支持solaris)          其下载地址:
其他操作系统(比如:Linux, Unix, BSD,等等),你可以选择 Java Comm v3 或者是RxTx。          Java Comm v3下载地址: (需要注册);
         RxTx官网: or
附件提供相关下载:
  • java串口通信v2:
  • 短信 modem驱动:
本次测试的环境是window,GSM modem是wavecom,所以这次主要描述window环境下简单的实现过程:
【一】、配置相应的环境
      首先解压下载的Java Comm v2文件javacomm20-win32.zip,具体配置步骤如下:
  • 把文件:comm.jar copy 到目录:JDKDIR/jre/lib/ext/,当然这一步也可以不要这样做,你只需把comm.jar copy到所要运行的项目对应的lib/下既可
  • 把文件:javax.comm.properties copy 到目录:JDKDIR/jre/lib/
  • 把DLL文件:win32com.dll(windows) copy 到目录:JDKDIR/jre/bin/
  • 如果存在JRE目录, 最好安装上面步骤把文件copy到JREDIR相应的目录下
【二】、测试串口端口程序:

TestGetPortList.java

package michael.comm.serial;

import java.util.Enumeration;
import javax.comm.CommDriver;
import javax.comm.CommPortIdentifier;
import javax.comm.SerialPort;
/**
 * @author michael
 *
 */
public class TestGetPortList {
    /**
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        // 人工加载驱动
        // MainTest.driverInit();
        TestGetPortList.getCommPortList();
        // 人工加载驱动获取端口列表
        // TestGetPortList.getPortByDriver();
    }
    /**
     * 手工加载驱动<br>
     * 正常情况下程序会自动加载驱动,故通常不需要人工加载<br>
     * 每重复加载一次,会把端口重复注册,CommPortIdentifier.getPortIdentifiers()获取的端口就会重复
     */
    public static void driverManualInit() {
        String driverName = "com.sun.comm.Win32Driver";
        String libname = "win32com";
        CommDriver commDriver = null;
        try {
            System.loadLibrary("win32com");
            System.out.println(libname + " Library Loaded");
            commDriver = (javax.comm.CommDriver) Class.forName(driverName)
                    .newInstance();
            commDriver.initialize();
            System.out.println("comm Driver Initialized");
        } catch (Exception e) {
            System.err.println(e);
        }
    }
    /**
     * 获取端口列表
     */
    public static void getCommPortList() {
        CommPortIdentifier portId;
        Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();
        while (portEnum.hasMoreElements()) {
            portId = (CommPortIdentifier) portEnum.nextElement();
            if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                System.out.println("串口: name-" + portId.getName()
                        + " 是否占用-" + portId.isCurrentlyOwned());
            } else {
                System.out.println("并口: name-" + portId.getName()
                        + " 是否占用-" + portId.isCurrentlyOwned());
            }
        }
        System.out.println("-------------------------------------");
    }
    /**
     *
     */
    public static void getPortByDriver() {
        String driverName = "com.sun.comm.Win32Driver";
        String libname = "win32com";
        CommDriver commDriver = null;
        try {
            System.loadLibrary("win32com");
            System.out.println(libname + " Library Loaded");
            commDriver = (CommDriver) Class.forName(driverName).newInstance();
            commDriver.initialize();
            System.out.println("comm Driver Initialized");
        } catch (Exception e) {
            System.err.println(e);
        }
        SerialPort sPort = null;
        try {
            sPort = (SerialPort) commDriver.getCommPort("COM24",
                    CommPortIdentifier.PORT_SERIAL);
            System.out.println("find CommPort:" + sPort.toString());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

 

转载于:https://my.oschina.net/linuxred/blog/16878

你可能感兴趣的文章
Python开发【第一篇】:目录
查看>>
《新闻发布》解析
查看>>
C++知识点
查看>>
FTP传输文件被破坏的问题(Linux、Busybox)
查看>>
242. Valid Anagram
查看>>
P1024 一元三次方程求解(二分答案)
查看>>
Collections库使用
查看>>
SQL Server开启READ_COMMITTED_SNAPSHOT
查看>>
Linux学习7之Shell基础--Bash的变量
查看>>
VirtualBox虚拟机增加CentOS根目录容量 LVM扩容
查看>>
Nginx 和 PHP 的两种部署方式比较
查看>>
纪录2b,和诡异,
查看>>
appendFormat
查看>>
centos下安装升级python到python3.5
查看>>
数据结构实验之排序二:交换排序
查看>>
【视频教程】Mini6410/Tiny6410的国嵌视频教程光盘,总共五张
查看>>
桶排序
查看>>
追MM与Java的23种设计模式[转]
查看>>
线程 2
查看>>
[C#][控件]文本类控件
查看>>