文档章节

SMSLib实现Java短信收发的功能

墙头草
 墙头草
发布于 2011/05/16 16:36
字数 913
阅读 1462
收藏 6

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

   用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
936
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
161
1

没有更多内容

加载失败,请刷新页面

加载更多

图的拓扑排序(动图)

概述 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,...

大洼X
20分钟前
3
0
CentOS7安装Redis和搭建Redis高可用集群

一、CentOS7下Redis安装 1.查看linux内核版本 此步骤可以省略,一般CentOS7内核版本都应该满足,因为搭建Redis高可用集群是Redis3以上才支持的,而Redis3需要linux内核高于3.10版本,所有才有...

liddblog
23分钟前
3
0
活动泄漏了最初添加的窗口

这是什么错误,为什么会发生? 05-17 18:24:57.069: ERROR/WindowManager(18850): Activity com.mypkg.myP has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44c4......

技术盛宴
23分钟前
3
0
IT兄弟连 HTML5教程 DIV+CSS的兼容性问题

使用DIV+CSS布局网页其实是很容易的事情,但各种浏览器之间的不兼容性问题,加大了页面布局的难度,给程序员带来很多不便,于是需要花费更多的时间在调试各种浏览器的兼容性上。因为部分CSS...

老码农的一亩三分地
25分钟前
3
0
商家发货

商家发货 商家发货 打开后台-订单-订单列表 1.点击筛选出待发货的订单可进行批量操作。批量发货、批量打印快递单、批量打印发货单。 2.点击发货时,弹出框显示待发货的商品,发货方式可选需要...

Geek-Chic
27分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部