SMSLib實現Java短信收發的功能

   用java實現短信收發的功能,目前通常項目中短信羣發功能的實現方法大體有下面三種:
  • 一、 向運行商申請短信網關,不須要額外的設備,利用運行商提供的API調用程序發送短信,適用於大型的通訊公司。
  • 二、 藉助像GSM MODEM之類的設備(支持AT指令的手機也行),經過數據線鏈接電腦來發送短信,這種方法比較適用於小公司及我的。要實現這種方式必須理解串口通訊、AT指令、短信編碼、解碼。
  • 三、 藉助第三方運行的網站實現,由網站代發短信數據,這種方法對網站依賴性過高,對網絡的要求也比較高。

       鑑於項目的狀況和多方考慮,同時又找到了一個開源的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 php

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());
        }

    }

}html

相關文章
相關標籤/搜索