當前位置:首頁 » 編程語言 » java簡訊發送

java簡訊發送

發布時間: 2023-03-20 04:51:56

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編碼。

Ⅱ 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實現簡訊自動發送功能

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 非同步發送簡訊,非同步實現:
1,使用spring框架的非同步註解 @Async ,底層應該是一個線程。
2,簡單粗暴的方式:開一個線程
new Thread(new Runnable() {
public void run() {
//發送簡訊
}
}).start();
當然也可以高級一點,使用線程池。
3,更高端一點:使用消息隊列MQ

Ⅳ Java怎樣實現簡訊發送與接收

Java實現簡訊發送與接收
/**
*@Authordengsilinming
*@Date2012-9-18
*
*/
packagecom.dengsilinming.mail;

importjava.io.IOException;

importorg.apache.commons.httpclient.Header;
importorg.apache.commons.httpclient.HttpClient;
importorg.apache.commons.httpclient.HttpException;
importorg.apache.commons.httpclient.NameValuePair;
importorg.apache.commons.httpclient.methods.PostMethod;

publicclassSendMsg_webchinese{

/**
*@authordengsilinming
*@dateSep18,2012
*@time9:38:25AM
*@paramargs
*@throwsIOException
*@throwsHttpException
*@description
*/
publicstaticvoidmain(String[]args)throwsHttpException,IOException{
HttpClientclient=newHttpClient();
PostMethodpost=newPostMethod("http://gbk.sms.webchinese.cn");
//PostMethodpost=newPostMethod("http://sms.webchinese.cn/web_api/");
post.addRequestHeader("Content-Type",
"application/x-www-form-urlencoded;charset=gbk");//在頭文件中設置轉碼
NameValuePair[]data={newNameValuePair("Uid","dengsilinming"),//注冊的用戶名
newNameValuePair("Key","72da78da5ff54f450505"),//注冊成功後,登錄網站後得到的密鑰
newNameValuePair("smsMob","12345678900"),//手機號碼
newNameValuePair("smsText","這是專用於測試的信息,能否正常發簡訊呢?")};//簡訊內容
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(
"gbk"));
System.out.println(result);

}

}

Ⅵ 如何用JAVA實現發送手機簡訊

1.通過移動或聯通簡訊網關發送簡訊,這需要通信服務商給你開通簡訊埠,發送簡訊協議各個服務商都不一樣,比如移動的是cmpp2,cmpp3等
2.第二種是通過硬體設備發送簡訊,這個需要你有專門的硬體設備,比如一個上網卡或者一個手機模塊,通過調用com遵從一些協議發送簡訊

單純靠寫代碼是無法發簡訊的,至少要有一個WEBSERVICE介面或者硬體介面。

Ⅶ 如何用java實現,定時發送簡訊息

以前在遠標學過Java實現簡訊自動發送功能主要是用httpclient實現的,要有發簡訊的埠。
1、硬體設備是一個3G網卡;
2、軟體方面需要sun提過的java底層通信common包;
3、此外還需要第三方庫SMSLib,這個是開源項目,主要用於實現java發簡訊的功能;

Ⅷ java發送手機簡訊

你是什麼需求,如果是要用戶注冊發驗證碼這類,只能找簡訊發送的通訊類公司了;如果你是想給自己發,比如程序跑完了提醒你看結果,程序遇到異常提醒你處理之類,可以用「喵提醒」這類服務。但是無論如何,天下沒有免費的午餐,發簡訊肯定要費用,除非你是用喵提醒的公眾號文字提醒這類就可以不需要費用。

Ⅸ 用java發送手機簡訊,我想知道有幾種途徑,各自的優缺點,求大蝦指點、

可以通過服務商的簡訊介面實現發送簡訊。這個比較容易。一般花錢買簡訊發送數目後,服務商會給你介面文檔和開發包。照著調用介面就行。
優點 開物桐發容易 發送數目無限制 價格便宜
缺點 簡訊有時延時嚴重 有的簡訊發送後丟失

也可缺螞吵以用GSMmodem或GMS貓池發送,原理和用手機發送簡訊相同。買貓或貓池時人家會給你介面文檔,剩下的就伏侍是自己開發。這種方法需要了解的東西比較多。包括java和硬體的通訊。
優點 簡訊到達快 簡訊一般不會丟失
缺點 開發比較麻煩 運營商對發送數目有限制(超過一定數目就不讓發了) 價格較高

Ⅹ 如何用Java實現簡訊自動發送功能

方法一:
1.web.xml中配置listener
<listener>
<listener-class>
cn.com.jxlife.shs.web.action.csinquiry.surrender.MyListener
</listener-class>
</listener>
2.創建listener
import java.util.Timer;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyListener implements ServletContextListener {

private Timer timer = null;

@Override
public void contextInitialized(ServletContextEvent sce) {
timer = new Timer(true);
//設置任務計劃,啟動和間隔時間
timer.schele(new MyTask(), 0, 3*60*1000);
//3分鍾
//timer.schele(new MyTask(), 0, 3*60*1000);
//在1秒後執行此任務,每次間隔2秒
//timer.schele(new MyTask(), 1000, 2000);
}

@Override
public void contextDestroyed(ServletContextEvent sce) {
timer.cancel();
}

}
3.創建啟動的類MyTask
import java.util.Date;
import java.util.TimerTask;

public class MyTask extends TimerTask {

@Override
public void run() {
System.out.println("call at " + (new Date()));

}

}
方法二:
spring 下實現定時工作的調度框架quartz
· 1。從http://quartz-scheler.org/下載quartz的開源包
quartz-1.7.3.tar.gz

3.07M

· 2。從quartz-1.7.3.tar.gz 找到quartz-1.7.3.jar,放到項目的classpath下
(放到webroot/WEB-INF/lib)下

· 3。定義一個需要時間調度的程序
package com.machome.quartz;

public class CustomJob1 {

public void onTimeWork() {
System.out.println("數據備份任務啟動");
System.out.println("...");
System.out.println("數據備份任務完成");
}
}

· 4。剩餘的工作就都在spring xml文件里完成了
<!-- 被調度的bean -->
<bean id="job1" class="com.machome.quartz.CustomJob1"></bean>

<!-- 定義任務對象 -->
<bean id="jobtask1"
class="org.springframework.scheling.quartz.">
<!-- 被調度的bean -->
<property name="targetObject">
<ref bean="job1" />
</property>
<!-- 被調度的bean中的被調度的方法 -->
<property name="targetMethod">
<value>onTimeWork</value>
</property>
</bean>

<!-- 定義觸發對象 -->
<bean id="trigger1"
class="org.springframework.scheling.quartz.CronTriggerBean">

<!-- 任務對象 -->
<property name="jobDetail">
<ref bean="jobtask1" />
</property>

<!-- cron表達式 -->
<property name="cronExpression">
<value>10,15,20,25,30,35,40,45,50,55 * * * * ?</value>
</property>
</bean>

<!-- 調度對象 -->
<!-- 如果將lazy-init='false'那麼容器啟動就會執行調度程序 -->
<bean id="scheler" lazy-init="false"
class="org.springframework.scheling.quartz.SchelerFactoryBean">

<!-- 觸發對象 -->
<property name="triggers">
<list>
<ref bean="trigger1" />
</list>
</property>
</bean>

· 5。 將spring 項目部署到TOMCAT或JBOSS伺服器上
deploy項目
重啟TOMCAT server

· 6。看結果:

cron表達式參考:Quartz的cron表達式

熱點內容
燕山大學編譯原理期末考試題 發布:2024-11-05 20:13:54 瀏覽:523
華為電腦出現臨時伺服器 發布:2024-11-05 20:05:08 瀏覽:405
斗戰神免費挖礦腳本 發布:2024-11-05 19:53:25 瀏覽:662
網吧伺服器分別是什麼 發布:2024-11-05 19:45:32 瀏覽:389
忍3無傷腳本 發布:2024-11-05 19:11:40 瀏覽:302
江蘇雲伺服器散熱器定製 發布:2024-11-05 18:50:15 瀏覽:719
投資分紅網站源碼 發布:2024-11-05 18:36:38 瀏覽:504
我的世界推薦適合萌新的伺服器 發布:2024-11-05 18:30:03 瀏覽:578
c語言考級 發布:2024-11-05 18:16:54 瀏覽:505
易語言不能編譯安卓app嗎 發布:2024-11-05 18:14:11 瀏覽:836