- 1、 向运行商申请短信网关,不需要额外的设备,利用运行商提供的API调用程序发送短信,适用于大型的通信公司。
- 2、 借助像GSM MODEM之类的设备(支持AT指令的手机也行),通过数据线连接电脑来发送短信,这种方法比较适用于小公司及个人。要实现这种方式必须理解串口通信、AT指令、短信编码、解码。
- 3、 借助第三方运行的网站实现,由网站代发短信数据,这种方法对网站依赖性太高,对网络的要求也比较高。
- 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协议时需要的)
- window系统可以用SUN Java Comm v2. (该版本好像也支持solaris) 其下载地址:
- java串口通信v2:
- 短信 modem驱动:
- 把文件: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()); } } }