java实现短信通信的完整教程

作者:卖泡面的小男孩 时间:2023-03-23 23:03:40 

前言

短信信息的发送目前已经是项目中必不可少的部分,我们怎么通过web页面来实现把信息推送到别人手机上呢?简单点,编码的方式简单点!看完本篇文章,以后要实现短信的发送都只需要知道发什么?发给谁?就OK了,代码如下,是不是很简单^_^


String result= "";//返回状态
Note note = new Note();
String Tel = "17089490559";//接收人手机号
String message = "您好!";//短信内容
result = note.sendNote(Tel,message);//信息发送状态

要实现在页面或控制台输入一些信息再指定一个电话号码就能把信息发送给对方,这对B/S结构的项目来说可是头疼的,但我们能不能把要发送的信息和要发送的电话号码交给一个负责发送短信的服务器,由它来帮我们完成信息的发送呢?答案是肯定的,只是钱的问题…….(毕竟天下没有免费的午餐),明白了这一点,接下来就好办了,我们只要知道服务器在哪,以及怎么联系服务器不就搞定了。所幸的是Apache给我们提供了一个HttpClient 子类,用于帮助我们连接到发送短信的服务器,那发送短信的服务器在哪呢?网上有各种各样的短信服务平台,接下来我们以中国网建为例来讲解短信信息的发送。
首先,你需要注册一个账号,注册完成后系统会为你提供一个用户名和一个密钥(在修改短信密钥里找到)并且提供5条免费短信,对于测试来说足够了,我们需要的就是id和key这两个东西,接下来开始吧!

1、导入相关jar包

相关jar包:

java实现短信通信的完整教程

jar包下载:短信通信

2、制作短信小工具

我们希望的是一劳永逸,做一个项目就要导包改各种参数是很费劲的,接下来我们用单例模式来为我们的项目提供信息修改吧,有信息变动我们只需要改配置文件就可以了,代码部分完全不用变。这样我们通过一个note.properties来放配置文件,一个ConfigNoteInfo.java调用配置文件参数的类,以及一个Note.java实现短信的发送的类就实现小工具的制作了,接下来依次教大家配置这三个文件。

第一步,我们在项目里新建一个叫note.properties的文件,里面的参数就两个(这里是放在src根目录下里)。


id=xxx(xxx是你注册的用户名)
key=********(注册成功后平台提供的短信密钥)

第二步,ConfigNoteInfo.java获取配置文件中的id和key


public class ConfigNoteInfo {
private static ConfigNoteInfo configNoteInfo;
private static Properties properties;

private ConfigNoteInfo(){
 //note.properties是你在根目录新建的配置文件
 String configFile="note.properties";
 properties=new Properties();
 InputStream in=ConfigNoteInfo.class.getClassLoader().getResourceAsStream(configFile);
 try {
  properties.load(in);
  in.close();
 } catch (IOException e) {
  e.printStackTrace();
 }
}
public static ConfigNoteInfo getInstance(){
 if(configNoteInfo==null){
  configNoteInfo = new ConfigNoteInfo();
 }
 return configNoteInfo;
}
public String getString(String key){

return properties.getProperty(key);
}
}

第三步,Note.java类实现短信信息的发送,基于OOP思想,我们还是把短信发送单独提出来成为一个方法,让以后的工作中只需要传一个手机号和一个消息字符串就能实现短信的发送。(如果是多个手机号可传手机号的数组或List集合)


package cn.hs.tools;

import java.io.IOException;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.PostMethod;

/***
* @author HeShuang
*@Create_date:2017-5-4
*/
public class Note {
//短信接口,传参(手机号,短信内容)即可发送短信。
public String sendNode(String Tel,String message) throws HttpException, IOException{
 HttpClient client = new HttpClient();
 PostMethod post = new PostMethod("http://utf8.sms.webchinese.cn");
 post.addRequestHeader("Content-Type",
   "application/x-www-form-urlencoded;charset=UTF-8");// 在头文件中设置转码,这里为UTF-8
 NameValuePair[] data = {
   new NameValuePair("Uid", ConfigNoteInfo.getInstance().getString("id")), // 注册的用户名,我们通过单例模式从配置文件id中读取用户名。
   new NameValuePair("Key",ConfigNoteInfo.getInstance().getString("key")), // 注册成功后,登录网站后得到的密钥 ,同样从配置文件读取。
   new NameValuePair("smsMob", Tel), // 传递过来的手机号码
   new NameValuePair("smsText", message) // 传递过来的短信内容
 };
 post.setRequestBody(data);
 client.executeMethod(post);

Header[] headers = post.getResponseHeaders();
 int flag = post.getStatusCode(); //返回状态,参照API
 System.out.println("statusCode:" + flag);
 for (Header h : headers) {
  System.out.println("---" + h.toString());
 }
 String result = new String(post.getResponseBodyAsString().getBytes(
   "UTF-8"));
 System.out.println(result);

String info="";
 if(Integer.parseInt(result.trim())>0){
  info="发送成功!";
 }
 switch (result.trim()) {
  case "-1":
   info="用户账号不存在!";
   break;
  case "-2":
   info="接口密钥不正确";
   break;
  case "-3":
   info="尊敬的用户, * * ,请您先把短信费用缴了!";
   break;
  case "-4":
   info="手机号格式不正确!";
   break;
  case "-6":
   info="IP存在限制!";
   break;
  case "-11":
   info="该用户已被禁用!";
   break;
  case "-14":
   info="短信内容存在非法字符!";
   break;
  default:
   break;
 }
return info;
}

}

第四步,在其他地方调用我们的工具类实现短信的发送。


String result= "";//返回状态
Note note = new Note();
String Tel = "17089490559";//要发送的手机号
String message = "您好!";//要发送的短信信息
result = note.sendNote();//获取信息发送状态

就此,java实现短信信息的发送功能就完成了,并且我们还把它做成了一个小工具类,信息有变更时,只需要改配置文件就行了,一次编写,处处复制。

标签:java,短信,通信
0
投稿

猜你喜欢

  • C语言实现四窗口聊天

    2021-12-28 01:02:12
  • 详解Java对象结构与对象锁的升级

    2021-12-05 16:18:38
  • Java单例模式的线程安全,饿汉和懒汉模式详解

    2022-05-31 16:12:08
  • springboot项目启动,但是访问报404错误的问题

    2022-09-21 10:30:10
  • SpringBoot 实现动态添加定时任务功能

    2022-07-12 05:07:40
  • Android 七种进度条的样式

    2022-01-22 07:15:23
  • c# 如何将字符串转换为大写或小写

    2023-01-04 20:44:28
  • C#中的委托和事件

    2021-09-14 01:01:55
  • 详解Java环境变量配置方法(Windows)

    2022-05-09 02:39:33
  • Java多线程之Future设计模式

    2022-07-19 05:28:25
  • C# 输出字符串到文本文件中的实现代码

    2022-08-25 11:18:13
  • 在SpringBoot项目中的使用Swagger的方法示例

    2022-01-04 15:14:39
  • 向一个数组中插入一个1~100的随机数

    2022-03-29 16:12:22
  • Android之在linux终端执行shell脚本直接打印当前运行app的日志的实现方法

    2021-06-12 23:41:08
  • Android 中RecyclerView顶部刷新实现详解

    2022-08-20 17:22:39
  • 浅谈java 重写equals方法的种种坑

    2023-02-03 08:14:12
  • Java NIO实例UDP发送接收数据代码分享

    2022-12-03 01:30:37
  • android实现QQ微信侧滑删除效果

    2021-07-11 15:58:11
  • android之listview悬浮topBar效果

    2022-12-24 23:29:58
  • C#使用iTextSharp封装的PDF文件操作类实例

    2023-05-16 22:26:52
  • asp之家 软件编程 m.aspxhome.com