- 浏览: 550202 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
jsdsh:
自己写的就是不一样.
Spring3 MVC 注解(二)---@RequestMapping -
jsdsh:
吼,非常吼.学习了
Spring3 MVC 注解(一)---注解基本配置及@controller和 @RequestMapping 常用解释 -
爱情是一种错觉:
我爱你 i love 你[color=red][/color] ...
Spring3 MVC 注解(一)---注解基本配置及@controller和 @RequestMapping 常用解释 -
fs08ab:
大哥,目前这个问题有什么可靠的解决方案吗
@ResponseBody注解 -
lhs295988029:
说的很清楚,明白了~
Spring3 MVC 注解(一)---注解基本配置及@controller和 @RequestMapping 常用解释
1.mysql做后台数据库;
2.java应用smslib实现短信的发送与接收。
3.可以考虑在linux下实现;
SMSLib是一个API库用于通过GSM Modem收发SMS短信息。提供Java和.Net两个版本。
http://smslib.sourceforge.net/
在Windows环境下使用SMSLib编程的时候,我们需要做一下comm的配置:
1. 将win32com.dll放置在%JAVA_HOME%\jre\bin下
2. 将comm.jar放置在%JAVA_HOME%\jre\lib\ext下
3. 将javax.comm.properties放置在%JAVA_HOME%\jar\lib下
再试试SMSLib自带的examples,看看效果。
使用SMSLib发短信
最近的项目,有个需求是要发短信,设备是一台WAVECOM的串口短信 mao。
随猫附送的接口是ActiveX控件做的,我本来打算用VB写个接口程序来调用,但是看了下它的Demo例子,要发送的消息要放到控件的数组,发送成功以后还要自己删,相当麻烦。
调用短信 mao,都是通过串口通讯和AT命令,其实那个控件也不过是做了一下封装。在Java环境下,实现这些也是可以的,但是发中文短信要采用PDU模式,文字要经过PDU编码,去看文档也很麻烦。还好这些事情网上的开源项目SMSLib已经都已经帮我们做了。
到http://code.google.com/p/smslib 下载了两个压缩文件smslib-v3.1.0.zip和javacomm20-win32.zip。
其中smslib-v3.1.0.zip是源代码,需要用ant编译成jar,javacomm20-win32.zip下是串行通讯协议需要的包。
javacomm20- win32.zip解开,里面的comm.jar需要放到%JAVA_HOME%/jre/lib/ext 下,javax.comm.properties放到%JAVA_HOME%/jre/lib下,win32com.dll放到%JAVA_HOME% /jre/bin下。路径放错了,调用起来就会报错的。
实际编译的时候,还需要一个commons-net的包,我下的是commons-net-1.4.1.jar。
环境配置复杂了点,但是用起来很简单,贴一下我的代码。
public boolean open() {
srv = new Service();
//comPort 串口名,比如COM1或者/dev/ttyS1
//baudRate 端口速度,WAVECOM是9600
//manufacturer,model 制造商和型号随便填
SerialModemGateway gateway = new SerialModemGateway("SMS",comPort,baudRate,manufacturer,model,srv.getLogger());
gateway.setInbound(true);
gateway.setOutbound(true);
//gateway.setSimPin("0000");
gateway.setOutboundNotification(outboundNotification);
srv.addGateway(gateway);
try {
srv.startService();
}
catch (Exception ex) {
log.error(ex);
return false;
}
return true;
}
public boolean sendSms(String mobile,String content) {
msg = new OutboundMessage(mobile, content);
msg.setEncoding(MessageEncodings.ENCUCS2);
try {
srv.sendMessage(msg);
System.out.println(msg);
}
catch (Exception ex) {
log.error(ex);
return false;
}
return true;
}
public void close() {
try {
srv.stopService();
}
catch (Exception ex) {
log.error(ex);
}
}
public class OutboundNotification implements IOutboundMessageNotification
{
public void process(String gatewayId, OutboundMessage msg)
{
System.out.println("Outbound handler called from Gateway: " + gatewayId);
System.out.println(msg);
}
}
另外附,通过远程终端按文本方式发短信的AT命令
AT+CMGF=1
OK
AT+CMGS=136XXXXXXX
>Test^Z
+CMGS: 204
OK
--------------------------------------------------------
JAVA短信收发控件开发示例
package com.diagcn.smslib.test;
import java.util.LinkedList;
import java.util.List;
import com.diagcn.smslib.CIncomingMessage;
import com.diagcn.smslib.CMessage;
import com.diagcn.smslib.COutgoingMessage;
import com.diagcn.smslib.CService;
import com.diagcn.smslib.CStatusReportMessage;
public class SampleClass {
/**
* @param args
*/
public static void main(String[] args) {
// 与短信设备建立连接,参数 1、端口号,2、速率,3、短信设备牌子,4、短信设备型号
CService srv = new CService("COM1", 9600, "Wavecom", "");
try {
// 设置短信中心号码
srv.setSmscNumber("+8613800210500");
// 连接设备
srv.connect();
// 连接成功,可以显示短信设备状态
System.out.println("Mobile Device Information: ");
System.out.println(" Manufacturer : "
+ srv.getDeviceInfo().getManufacturer());
System.out.println(" Model : "
+ srv.getDeviceInfo().getModel());
System.out.println(" Serial No : "
+ srv.getDeviceInfo().getSerialNo());
System.out.println(" IMSI : "
+ srv.getDeviceInfo().getImsi());
System.out.println(" S/W Version : "
+ srv.getDeviceInfo().getSwVersion());
System.out.println(" Battery Level : "
+ srv.getDeviceInfo().getBatteryLevel() + "%");
System.out.println(" Signal Level : "
+ srv.getDeviceInfo().getSignalLevel() + "%");
// 创建发送对象
COutgoingMessage msg = new COutgoingMessage("13917074111", "中文测试");
// 设置编码
msg.setMessageEncoding(CMessage.MessageEncoding.EncUcs2);
// 此短信需要状态回复
msg.setStatusReport(true);
// 短信有效期
msg.setValidityPeriod(8);
// 发送短信
srv.sendMessage(msg);
// 接收短信代码====================================================================
List<CIncomingMessage> msgList = new LinkedList<CIncomingMessage>();
srv.readMessages(msgList, CIncomingMessage.MessageClass.All);
for (int i = 0; i < msgList.size(); i++) {
CIncomingMessage message = msgList.get(i);
if (message instanceof CStatusReportMessage) {
// 此短消息为 状态回复短消息
}
srv.deleteMessage(message); // 删除都到的短信
}
// ==============================================================================
srv.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}}
----------------------------------
使用java操作wavecom短信 mao来发短信的方法
2008年07月29日 星期二 09:58
由于业务的需要,今天用java实现了用wavecom短信 mao发短信的功能,本来这个应该用随猫购买的二次开发接口实现的,但由于这几台猫买的时候,经销商没有提供二次开发接口,所以我不得不在网上找了资料,自己写了个接口实现了发短信的功能。
实现这个功能,需要两个jar包,可以到http://code.google.com/p/smslib 下载smslib-v3.3.0-B2-bin.zip和javacomm20-win32.zip。
首先,把smslib-v3.3.0-B2-bin.zip解开,在smslib\dist\lib目录下找到smslib-3.3.0b2.jar,放 入工程lib中,再把javacomm20-win32.zip解开,里面的comm.jar需要放到工程lib 下,javax.comm.properties放到%JAVA_HOME%/jre/lib下,win32com.dll放到%JAVA_HOME% /jre/bin下。路径放错了,调用起来就会报错的。
环境配置好了以后,使用起来很简单,贴下我的代码:
// SendMessage.java - Sample application.
//
// This application shows you the basic procedure for sending messages.
// You will find how to send synchronous and asynchronous messages.
//
// For asynchronous dispatch, the example application sets a callback
// notification, to see what's happened with messages.
package song.test;
import org.smslib.IOutboundMessageNotification;
import org.smslib.Library;
import org.smslib.OutboundMessage;
import org.smslib.Service;
import org.smslib.Message.MessageEncodings;
import org.smslib.modem.SerialModemGateway;
public class SendMessage
{
public void doIt() throws Exception
{
Service srv;
OutboundMessage msg;
OutboundNotification outboundNotification = new OutboundNotification();
System.out.println("Example: Send message from a serial gsm modem.");
System.out.println(Library.getLibraryDescription());
System.out.println("Version: " + Library.getLibraryVersion());
srv = new Service();
SerialModemGateway gateway = new SerialModemGateway("modem.com1", "COM1", 115200, "wavecom", "17254");
gateway.setInbound(true);
gateway.setOutbound(true);
gateway.setSimPin("0000");
gateway.setOutboundNotification(outboundNotification);
srv.addGateway(gateway);
srv.startService();
System.out.println("Modem Information:");
System.out.println(" Manufacturer: " + gateway.getManufacturer());
System.out.println(" Model: " + gateway.getModel());
System.out.println(" Serial No: " + gateway.getSerialNo());
System.out.println(" SIM IMSI: " + gateway.getImsi());
System.out.println(" Signal Level: " + gateway.getSignalLevel() + "%");
System.out.println(" Battery Level: " + gateway.getBatteryLevel() + "%");
System.out.println();
// Send a message synchronously.
msg = new OutboundMessage("13649251175", "这个是用java发的中文短信!");//手机号码,和短信内容
msg.setEncoding(MessageEncodings.ENCUCS2);//这句话是发中文短信必须的
srv.sendMessage(msg);
System.out.println(msg);
System.out.println("Now Sleeping - Hit <enter> to terminate.");
System.in.read();
srv.stopService();
}
public class OutboundNotification implements IOutboundMessageNotification
{
public void process(String gatewayId, OutboundMessage msg)
{
System.out.println("Outbound handler called from Gateway: " + gatewayId);
System.out.println(msg);
}
}
public static void main(String args[])
{
SendMessage app = new SendMessage();
try
{
app.doIt();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
发表评论
-
使用MongoDB和Spring Data创建一个简单的Java 的CRUD应用
2012-08-01 09:57 1436MongoDB 是一个可扩展的、高性能的、开源的NoSQL ... -
JAVA解决大批量导出数据到excel产生内存溢出的方案 (转)
2012-06-15 10:12 0@SuppressWarnings("u ... -
SSH配置多个数据源
2012-03-13 14:41 01. 编写hibernate的数据库配置文 Mysql_hi ... -
HTML字符实体(Character Entities),转义字符串(Escape Sequence)
2012-02-27 10:39 2159为什么要用转义字符串 ... -
Apache Commons工具集简介
2011-12-27 19:11 988Apache Commons包含了很多开源的工具,用于解决 ... -
转:YouTube 架构学习体会
2011-11-22 15:23 1186YouTube发展迅速,每天超过1亿的视频点击量,但只有很少人 ... -
字符,字节和编码
2011-11-09 16:22 1192摘要:本文介绍了字符与编码的发展过程,相关概念的正确理解。 ... -
Java日期时间操作函数代码
2011-08-13 16:18 1214/** 日期类 * @date ... -
Log4J diy手册
2011-08-01 11:55 15141. Introduction 在开 ... -
深入分析 Java 中的中文编码问题
2011-07-11 17:12 1526几种常见的编码格式 ... -
BufferedImage to InputStream
2011-06-30 20:56 26122URL url = new URL("http:// ... -
Java打包指南-JAR文件包及jar命令详解
2011-06-15 15:54 9119命令行打war包 ja ... -
正则表达式
2011-06-14 17:35 1422匹配中文字符的正则表达式: [\u4e00-\u9fa5] ... -
svn 命令
2011-06-14 15:59 1011svn co svn+ssh://username@116.2 ... -
使用 jsoup 对 HTML 文档进行解析和操作
2011-06-10 10:32 1626jsoup 简介 Java 程序在解析 HTML 文 ... -
linux设置编码
2011-05-20 10:45 1457set character_set_client='utf ... -
HTML中include file标签的用法
2011-05-05 17:02 21462<!-- #include PathType = Fil ... -
下载 中文文件名乱码问题
2011-04-28 09:42 1237private String processFileName( ... -
Install Redis
2011-04-08 10:16 15091. Get wget http://redis.googl ... -
eclipse.ini内存设置
2011-03-25 17:27 1251eclipse配置: -startu ...
相关推荐
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
3. **监控与报警**:Python可以构建性能监控和异常检测系统,如使用prometheus客户端库进行指标收集,发送邮件或短信报警则可以借助smtplib和smslib。 4. **自动化部署**:Python可以实现应用程序的自动化部署,如...
Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...
简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!...
Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...
Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...
Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...
Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...
Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...
Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...
Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...
Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...
Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...
Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...
Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...
Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...