当前位置:首页 » 编程语言 » java如何发短信

java如何发短信

发布时间: 2022-07-24 13:40:54

⑴ 如何用java实现,定时发送短信息

以前在远标学过Java实现短信自动发送功能主要是用httpclient实现的,要有发短信的端口。
1、硬件设备是一个3G网卡;
2、软件方面需要sun提过的java底层通信common包;
3、此外还需要第三方库SMSLib,这个是开源项目,主要用于实现java发短信的功能;

⑵ 如何用JAVA实现发送手机短信

1.通过移动或联通短信网关发送短信,这需要通信服务商给你开通短信端口,发送短信协议各个服务商都不一样,比如移动的是cmpp2,cmpp3等
2.第二种是通过硬件设备发送短信,这个需要你有专门的硬件设备,比如一个上网卡或者一个手机模块,通过调用com遵从一些协议发送短信

单纯靠写代码是无法发短信的,至少要有一个WEBSERVICE接口或者硬件接口。

⑶ java怎么同步发送及异步发送短信例子解析

  1. 发送短信的接口
    根据自己的情况选择服务商。

  2. 开发文档
    从开发文档中我们可以看到. 可以直接使用http请求也可以使用WebService请求发送短信. 由于DEMO文件夹下的java和jsp文件夹中的代码都是使用http请求发送短信. 所以这里就不再细说了, 我们使用WebService的方式演示发送短信.

  3. 生成客户端代码

    从接口文档中我们知道它的WebService的WSDL的url为:http://106.ihuyi.cn/webservice/sms.php?WSDL那么我们可以执行下面的命令生成客户端代码:

    wsimport -keep http://106.ihuyi.cn/webservice/sms.php?WSDL

    其中wsimport是JDK自带的工具, -keep url选项是"保留生成的文件". 该命令会在当前目录下生成sms.cn.ihuyi._106包, 以及众多的类. 接下来开始编写我们自己的代码.

  4. 定义接口

    为了方便, 这里我们首先定义一个接口:

    Sms.java
    publicinterfaceSms{
    /**
    *向mobile发送短信,内容为message
    *
    *@parammobile手机号
    *@parammessage短信内容
    *@return成功返回-1,否则返回其他值
    */
    intsendMessage(Stringmobile,Stringmessage);
    }

    这个接口很简单, 只有一个方法. 这个方法用来发送短信.

  5. 同步发送短信

    接下来我们首先实现一个同步发送短信的类:


    IhuyiSmsImpl.java
    {

    privateStringaccount;
    privateStringpassword;

    publicvoidsetAccount(Stringaccount){
    this.account=account;
    }

    publicvoidsetPassword(Stringpassword){
    this.password=password;
    }

    @Override
    publicintsendMessage(Stringmobile,Stringmessage){
    cn.ihuyi._106.Smsfactory=newcn.ihuyi._106.Sms();
    SmsSoapsmsSoap=factory.getSmsSoap();
    SubmitResultsubmit=smsSoap.submit(account,password,mobile,message);
    intcode=submit.getCode();
    if(code==2){
    return-1;
    }
    System.out.println("发送短信失败,code:"+code);
    returncode;
    }
    }
  6. 异步发送短信

    由于发送短信涉及到网络通信, 因此sendMessage方法可能会有一些延迟. 为了改善用户体验, 我们可以使用异步发送短信的方法. 原理很简单: 如果用户请求发送短信, 我们不是直接调用IhuyiSmsImpl的sendMessage方法, 而是将请求保存起来(生产者), 然后告诉用户: 短信发送成功. 之后有若干个消费者取出任务, 调用sendMessage方法发送短信.

    这里, 我使用线程池完成上面的任务:

    AsyncSmsImpl.java
    {
    publicSmssendSms;
    =Executors.newFixedThreadPool(3);

    publicvoidsetSendSms(SmssendSms){
    this.sendSms=sendSms;
    }

    @Override
    publicintsendMessage(Stringmobile,Stringmessage){
    try{
    executorService.submit(()->sendSms.sendMessage(mobile,message));
    }
    catch(Exceptione){
    Sysemt.out.println("提交任务时发生错误"+e);
    return0;
    }
    return-1;
    }

    publicvoiddestroy(){
    try{
    executorService.shutdown();
    }
    catch(Exceptione){}
    }
    }

    在第17行, 我们获得远程对象的一个代理对象. 之后就可以通过这个代理对象进行发送短信, 查询账户余额等操作.

    第18行, 使用该代理对象的submit方法提交了短信内容. 该方法的参数信息及返回值含义在接口文档中有详细的说明.

    第19行我们获得了结果的状态码. 根据文档上的说明, 状态码为2说明提交成功. 简单起见, 这里我们只关注提交成功的情况. 需要注意的是, 状态码为2只是说明提交成功. 根据官网上的"3-5秒内响应、100%到达", 我们可以推测. 如果提交成功, 那么基本上3-5秒内,短信就会发送成功, 根据用户的网络情况, 可能稍有延迟用户就可以收到短信.

    使用这段代码发送短信也很简单, 直接new一个对象, 设置好账号和密码就可以发送短信了.

  7. 代码很简单, 直接将Sms接口的sendMessage(mobile, message)方法作为一个任务加到线程池的任务队列中. 这样等到有空闲线程时, 就会执行sendSms.sendMessage(mobile, message)发送短信. 这里我们假设只要保存到线程池就可以成功发送短信. 因为发送失败的情况实际上很罕见.

⑷ java怎么发送短信

importjava.net.URLEncoder;
importjava.net.URL;
importjava.net.URLConnection;
importjava.util.*;
importjava.io.*;

classhttp_post
{
publicStringsend_sms(Stringuser_id,Stringpassword,Stringmobile_phone,
Stringmsg,Stringsend_date,Stringsubcode){
Stringret_str="";

try{
//Constructdata
Stringdata="user_id="+user_id+"&password="+password+
"&mobile_phone="+mobile_phone+
"&msg="+URLEncoder.encode(msg,"GBK")+"&send_date="+send_date+
"&subcode="+subcode;
//Senddata
URLurl=newURL("http://bms.hichina.com/sms_gateway/sms_api");
URLConnectionconn=url.openConnection();
conn.setDoOutput(true);
OutputStreamWriterwr=newOutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();

//Gettheresponse
BufferedReaderrd=newBufferedReader(newInputStreamReader(conn.
getInputStream()));
Stringline;
while((line=rd.readLine())!=null){
ret_str+=line;
}
wr.close();
rd.close();
}
catch(Exceptione){
System.out.println(e.toString());
}

returnret_str;
}

publicstaticvoidmain(String[]args)throwsIOException
{
http_posthttp=newhttp_post();
Stringret=http.send_sms("4003","xxxxxxx","13900000000","fromjava中国万岁","","4003");
System.out.println(ret);
}

}

⑸ java怎么发送短信啊

我们以前的产品发短信有两个途径
1、短信猫(买来的设备,可以理解为手机,设备提供商会提供操作设备的接口,一般为Jar)
2、短信平台(平台供应商会给你提供接口、帐号、密码,你调用就可以啦,接口一般为jar或webservice,这个是要给账户充值的,如果你是软件开发商可以在平台供应商于客户直接赚取每条1-2分的差价)

如果你可以在移动或者联通可以申请到通道的话也可以直接用,这个我没有弄过。

⑹ 如何用Java实现短信自动发送功能

Java实现短信自动发送功能主要是用httpclient实现的,要有发短信的端口。

1、硬件设备是一个3G网卡;

2、软件方面需要sun提过的java底层通信common包;

3、此外还需要第三方库SMSLib,这个是开源项目,主要用于实现java发短信的功能;

主要代码如下:

HttpClientclient=newHttpClient();
PostMethodpost=newPostMethod(
"http://cf.lmobile.cn/submitdata/service.asmx/g_Submit");
post.addRequestHeader("Content-Type",
"application/x-www-form-urlencoded;charset=utf-8");//在头文件中设置转码
NameValuePair[]data={newNameValuePair("sname","*****"),
newNameValuePair("spwd","*****"),
newNameValuePair("scorpid","*****"),
newNameValuePair("sprdid","*****"),
newNameValuePair("sdst","*****"),
newNameValuePair("smsg","*****")};
post.setRequestBody(data);

client.executeMethod(post);
Header[]headers=post.getResponseHeaders();
intstatusCode=post.getStatusCode();
System.out.println("statusCode:"+statusCode);
for(Headerh:headers){
System.out.println(h.toString());
}
Stringresult=newString(post.getResponseBodyAsString().getBytes("utf-8"));
System.out.println(result);
post.releaseConnection();

⑺ java发送手机短信

你是什么需求,如果是要用户注册发验证码这类,只能找短信发送的通讯类公司了;如果你是想给自己发,比如程序跑完了提醒你看结果,程序遇到异常提醒你处理之类,可以用“喵提醒”这类服务。但是无论如何,天下没有免费的午餐,发短信肯定要费用,除非你是用喵提醒的公众号文字提醒这类就可以不需要费用。

⑻ java如何发短信

这个原理要讲老半天了
我们普通的发短消息,是靠手机发到短信中心,然后由短信中心发到对方手机
通过网页呢,就是直接把短信发到短信中心,各地的短信中心会提供ip地址和端口号。
这个短信的格式就是按照不同的协议来定义的。里面定义了from ,to ,content,fee,等等
简单的原理就是这样

⑼ java 如何发送短信

JAVA发送手机短信,流传有几种方法:(1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册;(2)使用短信mao的方式进行短信的发送,这种方式应该是比较的常用,前提是需要购买硬件设备,呵呵(3)使用中国网建提供的SMS短信平台
JAVA调用

import java.io.UnsupportedEncodingException;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
public class SendMsg_webchinese {

public static void main(String[] args)throws Exception
{

HttpClient client = new HttpClient();
PostMethod post = new PostMethod("http://gbk.sms.webchinese.cn");
post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");//在头文件中设置转码
NameValuePair[] data ={ new NameValuePair("Uid", "本站用户名"),new NameValuePair("Key", "接口安全密码"),new NameValuePair("smsMob","手机号码"),new NameValuePair("smsText","短信内容")};
post.setRequestBody(data);

client.executeMethod(post);
Header[] headers = post.getResponseHeaders();
int statusCode = post.getStatusCode();
System.out.println("statusCode:"+statusCode);
for(Header h : headers)
{
System.out.println(h.toString());
}
String result = new String(post.getResponseBodyAsString().getBytes("gbk"));
System.out.println(result);

post.releaseConnection();

}
}
jar包下载
commons-logging-1.1.1.jar
commons-httpclient-3.1.jar
commons-codec-1.4.jar

⑽ java如何实现发送短信验证码功能

1、创建一个Http的模拟请求工具类,然后写一个POST方法或者GET方法

/** * 文件说明 * @Description:扩展说明 * @Copyright: XXXX dreamtech.com.cn Inc. All right reserved * @Version: V6.0 */package com.demo.util; import java.io.IOException;import java.util.Map; import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpException;import org.apache.commons.httpclient.SimpleHttpConnectionManager;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.commons.httpclient.methods.PostMethod; /** * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser: feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX * @Version:V6.0 */public class HttpRequestUtil { /** * HttpClient 模拟POST请求 * 方法说明 * @Discription:扩展说明 * @param url * @param params * @return String * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser:feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX */ public static String postRequest(String url, Map<String, String> params) { //构造HttpClient的实例 HttpClient httpClient = new HttpClient(); //创建POST方法的实例 PostMethod postMethod = new PostMethod(url); //设置请求头信息 postMethod.setRequestHeader("Connection", "close"); //添加参数 for (Map.Entry<String, String> entry : params.entrySet()) { postMethod.addParameter(entry.getKey(), entry.getValue()); } //使用系统提供的默认的恢复策略,设置请求重试处理,用的是默认的重试处理:请求三次 httpClient.getParams().setBooleanParameter("http.protocol.expect-continue", false); //接收处理结果 String result = null; try { //执行Http Post请求 httpClient.executeMethod(postMethod); //返回处理结果 result = postMethod.getResponseBodyAsString(); } catch (HttpException e) { // 发生致命的异常,可能是协议不对或者返回的内容有问题 System.out.println("请检查输入的URL!"); e.printStackTrace(); } catch (IOException e) { // 发生网络异常 System.out.println("发生网络异常!"); e.printStackTrace(); } finally { //释放链接 postMethod.releaseConnection(); //关闭HttpClient实例 if (httpClient != null) { ((SimpleHttpConnectionManager) httpClient.getHttpConnectionManager()).shutdown(); httpClient = null; } } return result; } /** * HttpClient 模拟GET请求 * 方法说明 * @Discription:扩展说明 * @param url * @param params * @return String * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser:feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX */ public static String getRequest(String url, Map<String, String> params) { //构造HttpClient实例 HttpClient client = new HttpClient(); //拼接参数 String paramStr = ""; for (String key : params.keySet()) { paramStr = paramStr + "&" + key + "=" + params.get(key); } paramStr = paramStr.substring(1); //创建GET方法的实例 GetMethod method = new GetMethod(url + "?" + paramStr); //接收返回结果 String result = null; try { //执行HTTP GET方法请求 client.executeMethod(method); //返回处理结果 result = method.getResponseBodyAsString(); } catch (HttpException e) { // 发生致命的异常,可能是协议不对或者返回的内容有问题 System.out.println("请检查输入的URL!"); e.printStackTrace(); } catch (IOException e) { // 发生网络异常 System.out.println("发生网络异常!"); e.printStackTrace(); } finally { //释放链接 method.releaseConnection(); //关闭HttpClient实例 if (client != null) { ((SimpleHttpConnectionManager) client.getHttpConnectionManager()).shutdown(); client = null; } } return result; }}

2、在创建一个类,生成验证码,然后传递相应的参数(不同的短信平台接口会有不同的参数要求,这个一般短信平台提供的接口文档中都会有的,直接看文档然后按要求来即可)

/** * 文件说明 * @Description:扩展说明 * @Copyright: XXXX dreamtech.com.cn Inc. All right reserved * @Version: V6.0 */package com.demo.util; import java.net.URLEncoder;import java.util.HashMap;import java.util.Map; /** * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser: feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX * @Version:V6.0 */public class SendMsgUtil { /** * 发送短信消息 * 方法说明 * @Discription:扩展说明 * @param phones * @param content * @return * @return String * @Author: feizi * @Date: 2015年4月17日 下午7:18:08 * @ModifyUser:feizi * @ModifyDate: 2015年4月17日 下午7:18:08 */ @SuppressWarnings("deprecation") public static String sendMsg(String phones,String content){ //短信接口URL提交地址 String url = "短信接口URL提交地址"; Map<String, String> params = new HashMap<String, String>(); params.put("zh", "用户账号"); params.put("mm", "用户密码"); params.put("dxlbid", "短信类别编号"); params.put("extno", "扩展编号"); //手机号码,多个号码使用英文逗号进行分割 params.put("hm", phones); //将短信内容进行URLEncoder编码 params.put("nr", URLEncoder.encode(content)); return HttpRequestUtil.getRequest(url, params); } /** * 随机生成6位随机验证码 * 方法说明 * @Discription:扩展说明 * @return * @return String * @Author: feizi * @Date: 2015年4月17日 下午7:19:02 * @ModifyUser:feizi * @ModifyDate: 2015年4月17日 下午7:19:02 */ public static String createRandomVcode(){ //验证码 String vcode = ""; for (int i = 0; i < 6; i++) { vcode = vcode + (int)(Math.random() * 9); } return vcode; } /** * 测试 * 方法说明 * @Discription:扩展说明 * @param args * @return void * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser:feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX */ public static void main(String[] args) {// System.out.println(SendMsgUtil.createRandomVcode());// System.out.println("&ecb=12".substring(1)); System.out.println(sendMsg("18123456789,15123456789", "尊敬的用户,您的验证码为" + SendMsgUtil.createRandomVcode() + ",有效期为60秒,如有疑虑请详询XXX-XXX-XXXX【XXX中心】")); }

然后执行一下,一般的情况下参数传递正确,按照接口文档的规范来操作的话,都会发送成功的,手机都能收到验证码的,然后可能会出现的问题就是:发送的短信内容有可能会出现中文乱码,然后就会发送不成功,按照短信平台的要求进行相应的编码即可。一般都会是UTF-8编码。

热点内容
解压抠东西 发布:2025-03-04 16:14:43 浏览:596
android动态图片 发布:2025-03-04 16:13:09 浏览:41
linux读取输入 发布:2025-03-04 16:13:09 浏览:174
ecshop批量上传商品不显示图片 发布:2025-03-04 16:12:21 浏览:878
仓单加密 发布:2025-03-04 15:54:45 浏览:900
java架构师面试 发布:2025-03-04 15:54:05 浏览:968
安卓手机如何取饿了么会员 发布:2025-03-04 15:53:28 浏览:185
c语言int和double 发布:2025-03-04 15:38:04 浏览:443
手游编程入门 发布:2025-03-04 15:30:55 浏览:899
android进程被杀 发布:2025-03-04 15:30:52 浏览:394