文档章节

SMSLib实现Java短信收发的功能

墙头草
 墙头草
发布于 2011/05/16 16:36
字数 913
阅读 1456
收藏 6
   用java实现短信收发的功能,目前一般项目中短信群发功能的实现方法大致有下面三种:
  • 1、 向运行商申请短信网关,不需要额外的设备,利用运行商提供的API调用程序发送短信,适用于大型的通信公司。
  • 2、 借助像GSM MODEM之类的设备(支持AT指令的手机也行),通过数据线连接电脑来发送短信,这种方法比较适用于小公司及个人。要实现这种方式必须理解串口通信、AT指令、短信编码、解码。
  • 3、 借助第三方运行的网站实现,由网站代发短信数据,这种方法对网站依赖性太高,对网络的要求也比较高。

       鉴于项目的情况和多方考虑,同时又找到了一个开源的SMSLib项目的支持,比较倾向于第二种方法,SMSLib的出现就不需要我们自己去写底层的AT指令,这样就可以直接通过调用SMSLib的API来实现通过GSM modem来收发送短信了。

SMSLib官方网站:http://smslib.org/,使用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,GSM modem是wavecom,所以这次主要描述window环境下简单的实现过程:
【一】、配置相应的环境
      首先解压下载的Java Comm v2文件javacomm20-win32.zip,具体配置步骤如下:
  • 把文件:comm.jar copy 到目录:JDKDIR/jre/lib/ext/,当然这一步也可以不要这样做,你只需把comm.jar copy到所要运行的项目对应的lib/下既可bulldog
  • 把文件: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());
        }

    }

}

 

© 著作权归作者所有

墙头草
粉丝 16
博文 145
码字总数 117172
作品 0
卢湾
私信 提问
java 短信猫 smslib 并发操作?

java 短信猫 smslib 并发操作? java操作短信猫,如果遇到并发(或者发送后结果返回顺序不一致)的情况怎么办? 遇到发送量大,且都是给一个发送,如:给移动发送充值请求,那么怎么判断移动...

wad12302
2012/07/16
1K
2
java利用SMSLib通过COM发送短信JAR包

第一步: The installation procedure for both the old Java Comm v2 and the new Java Comm v3 is identical. Java Comm v2 is for Win32 systems and it is available on the Download pa......

asdtiang
2010/02/22
935
0
求解关于smslib的几个问题

1.要看smslib封装的发送At命令那部分源码,包括启动service时的,请问要看哪些类? 2.我发信息时老有个异常。。queue.peek()。。是警告类型,但是不阻碍程序运行,这么解决? 3.收短信时,短...

谭鹏
2010/11/23
808
0
利用SMSLib通过COM来发短信(JAR包及配置) XML

第一步: The installation procedure for both the old Java Comm v2 and the new Java Comm v3 is identical. Java Comm v2 is for Win32 systems and it is available on the Download pa......

asdtiang
2010/02/22
2.2K
0
smslib使用的问题,监听一个串口没问题,监听多个串口JVM就异常退出了

win10 64位 jdk7 64位,集成测试监听一个串口没问题,可以收发短信,当监听多个的时候启动就报异常的,不解,请问有人遇到过吗?貌似是底层调用的rxtxSerial.dll出的问题。 看API监听多个很简...

开源中国首席罗纳尔多
03/11
136
1

没有更多内容

加载失败,请刷新页面

加载更多

zk服务预启动和启动选举过程

QuorumPeerMain类public static void main(String[] args) { QuorumPeerMain main = new QuorumPeerMain(); try { main.initializeAndRun(args); } catch (Illega......

writeademo
28分钟前
5
0
深究递归和迭代的区别、联系、优缺点及实例对比

http://blog.csdn.net/laoyang360/article/details/7855860 http://www.zhihu.com/question/20278387 深究递归和迭代的区别、联系、优缺点及实例对比 1.概念区分 递归的基本概念:程序调用自身...

slagga
30分钟前
4
0
基于SOM-TL6678核心板而研发的TL6678-EasyEVM开发板硬件说明书

TL6678-EasyEVM是广州创龙基于SOM-TL6678核心板而研发的一款多核高性能DSP开发板。开发板采用核心板+底板方式,底板采用沉金无铅工艺的四层板设计,尺寸为200mm*106.65mm,它为用户提供了SOM...

Tronlong创龙
34分钟前
3
0
分别在有网和无网状态下批量安装python库

## 连网状态下,批量安装python库查看当前python环境下已安装的库包版本查看命令:pip freeze"""alabaster==0.7.10anaconda-client==1.6.3anaconda-navigator==1.6.2anaconda-projec......

KYO4321
37分钟前
3
0
fiddler、Charles-断点

一、添加Charles断点 1、用Charles抓包发起一次接口请求 2、对要打断点的接口右键,选择【Breakpoints】 二、Charles断点设置 1、点击Charles菜单-【Proxy】-【Breakpoint...】,此时会弹出【...

果树啊
37分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部