通過編程方式實(shí)現(xiàn)短信息的發(fā)送對(duì)很多人來說是一件比較煩雜的事情,目前一般的解決方法是通過計(jì)算機(jī)和手機(jī)的連線,通過可對(duì)手機(jī)編程的語言編寫相關(guān)的手機(jī)短信息程序來實(shí)現(xiàn),而這種方法對(duì)于一般人來說是很難達(dá)到的,因?yàn)榇朔N方法不僅要有很多必備的硬件設(shè)備,也還需懂得手機(jī)編程的相關(guān)知識(shí)。本文就來探討一下另外一種通過visual c#發(fā)送短信息的簡單實(shí)現(xiàn)方法,這種方法在實(shí)現(xiàn)過程中比我們想象的要簡單許多,只需擁有visual c#一般編程基礎(chǔ),并確定您的計(jì)算機(jī)接入互聯(lián)網(wǎng)即可。下面就來詳細(xì)介紹一下visual c#發(fā)送短信息的具體實(shí)現(xiàn)過程。
一. visual c#發(fā)送短信息的原理:
我想當(dāng)很多讀者一看到本文的題目一定會(huì)想本文內(nèi)容一定非常深?yuàn)W,并且作者一定知道了電信的發(fā)送短信的網(wǎng)關(guān)地址,其實(shí)并非如此。本文其實(shí)是利用一個(gè)現(xiàn)成的資源,一個(gè)可發(fā)送短信的web serviec。這個(gè)web service就是新浪網(wǎng)就提供的一個(gè),可供用戶直接調(diào)用的發(fā)送短消息的web service。這個(gè)service的地址是http://smsinter.sina.com.cn/ws/smswebservice0101.wsdl。在這個(gè)service中提供了一個(gè)發(fā)送短消息的方法"sendxml"。此方法的語法格式如下:
string sendxml (carrier , userid , password , mobilenumber , content , msgtype )
sendxml方法中的六個(gè)參數(shù)均為string類型,并且sendxml方法的返回值也是string類型。
以下是sendxml方法中的六個(gè)參數(shù)的具體說明:
·carrier:運(yùn)營商名稱,具體使用時(shí)此參數(shù)并沒有什么具體要求,即這里面可以隨便輸,輸入的字符串也不會(huì)在對(duì)方手機(jī)中有任何顯示。
·userid:在新浪網(wǎng)上注冊(cè)的手機(jī)號(hào),注冊(cè)手機(jī)所用的地址是:http://sms.sina.com.cn,具體注冊(cè)方法下面會(huì)具體介紹。
·password:您在新浪網(wǎng)成功注冊(cè)手機(jī)后,新浪網(wǎng)所反饋來的密碼。
·mobilenumber:要發(fā)送短信到對(duì)方的手機(jī)號(hào)碼。
·content:所要發(fā)送短消息的內(nèi)容。
·msgtype:發(fā)送短消息的類型,由于本文發(fā)送的不是彩信,所以輸入"text"。
調(diào)用此web service只需在visual c#開發(fā)環(huán)境中直接添加web引用,把該地址輸入即可,就可以使用此web service中的sendxml方法發(fā)送短消息了。當(dāng)然發(fā)送短消息的機(jī)器必須接入互聯(lián)網(wǎng)。
二.在新浪網(wǎng)上注冊(cè)手機(jī):
按照如下步驟就可在新浪網(wǎng)上注冊(cè)手機(jī):
1. 打開瀏覽器,并在地址欄中輸入新浪無線的地址:http://sms.sina.com.cn.。在瀏覽器德左上角,可見如圖01界面:
圖01:新浪網(wǎng)注冊(cè)手機(jī)界面之一 |
輸入手機(jī)號(hào)后,單擊圖01中的"登陸",如果你的手機(jī)沒有在新浪,則提示如圖02所示信息。
圖02:新浪網(wǎng)注冊(cè)手機(jī)界面之二 |
2. 按照?qǐng)D02中的選項(xiàng)輸入相應(yīng)的信息后,單擊"登陸移動(dòng)夢(mèng)網(wǎng)"按鈕,如果注冊(cè)成功,移動(dòng)夢(mèng)網(wǎng)則會(huì)向你注冊(cè)的手機(jī)上發(fā)送一個(gè)8位長度的口令就可以得到圖03所示界面。
圖03:新浪網(wǎng)注冊(cè)手機(jī)界面之三 |
這個(gè)口令要保留,下面發(fā)送短信就要使用這個(gè)口令。
三.本文程序設(shè)計(jì)、調(diào)試和運(yùn)行的環(huán)境:
。1).微軟公司視窗2000服務(wù)器版。
。2).visual studio .net 2003企業(yè)構(gòu)建版,.net framework sdk版本號(hào)4322。
四.visual c#實(shí)現(xiàn)短信息發(fā)送的具體實(shí)現(xiàn)步驟:
visual c#發(fā)送短信息的關(guān)鍵就是通過web引用新浪網(wǎng)提供的發(fā)送短信息的web service,并在引用完成后。調(diào)用此service的sendxml方法即可。以下就是visual c#引用web service發(fā)送短信息的具體實(shí)現(xiàn)步驟:
1. 啟動(dòng)visual studio .net。
2. 選擇菜單【文件】|【新建】|【項(xiàng)目】后,彈出【新建項(xiàng)目】對(duì)話框。
3. 將【項(xiàng)目類型】設(shè)置為【visual basic項(xiàng)目】。
4. 將【模板】設(shè)置為【windows應(yīng)用程序】。
5. 在【名稱】文本框中輸入【短信】。
6. 在【位置】的文本框中輸入【e:\vs.net項(xiàng)目】,然后單擊【確定】按鈕,這樣在"e:\vs.net項(xiàng)目"目錄中就產(chǎn)生了名稱為"短信"的文件夾,并在里面創(chuàng)建了名稱為"短信"的項(xiàng)目文件。
7. 把visual studio .net的當(dāng)前窗口切換到【form1.cs(設(shè)計(jì))】窗口,并從【工具箱】中的【windows窗體組件】選項(xiàng)卡中往form1窗體中拖入下列組件,并執(zhí)行相應(yīng)的操作:
四個(gè)label組件。
四個(gè)textbox組件。
一個(gè)button組件,其作用是發(fā)送短信息。并在這個(gè)button組件拖入form1的設(shè)計(jì)窗體后,雙擊它,則系統(tǒng)會(huì)在form1.cs文件分別產(chǎn)生這個(gè)組件的click事件對(duì)應(yīng)的處理代碼。
8. 把visual studio .net的當(dāng)前窗口切換到form1.vb的代碼編輯窗口,并用下列代碼替換form1.cs中的initializecomponent過程對(duì)應(yīng)的代碼,下列代碼作用是初始化窗體中加入的組件:
private void initializecomponent ( ) { this.textbox1 = new system.windows.forms.textbox ( ) ; this.textbox2 = new system.windows.forms.textbox ( ) ; this.textbox3 = new system.windows.forms.textbox ( ) ; this.button1 = new system.windows.forms.button ( ) ; this.label1 = new system.windows.forms.label ( ) ; this.label2 = new system.windows.forms.label ( ) ; this.label3 = new system.windows.forms.label ( ) ; this.label4 = new system.windows.forms.label ( ) ; this.textbox4 = new system.windows.forms.textbox ( ) ; this.suspendlayout ( ) ; this.textbox1.location = new system.drawing.point ( 144 , 16 ) ; this.textbox1.name = "textbox1" ; this.textbox1.size = new system.drawing.size ( 184 , 21 ) ; this.textbox1.tabindex = 0 ; this.textbox1.text = "" ; this.textbox2.location = new system.drawing.point ( 144 , 69 ) ; this.textbox2.name = "textbox2" ; this.textbox2.passwordchar = ''''''''*'''''''' ; this.textbox2.size = new system.drawing.size ( 184 , 21 ) ; this.textbox2.tabindex = 1 ; this.textbox2.text = "" ; this.textbox3.location = new system.drawing.point ( 144 , 122 ) ; this.textbox3.name = "textbox3" ; this.textbox3.size = new system.drawing.size ( 184 , 21 ) ; this.textbox3.tabindex = 2 ; this.textbox3.text = "" ; this.button1.location = new system.drawing.point ( 152 , 256 ) ; this.button1.name = "button1" ; this.button1.size = new system.drawing.size ( 80 , 32 ) ; this.button1.tabindex = 4 ; this.button1.text = "發(fā)送" ; this.button1.click += new system.eventhandler ( this.button1_click ) ; this.label1.location = new system.drawing.point ( 56 , 24 ) ; this.label1.name = "label1" ; this.label1.size = new system.drawing.size ( 88 , 16 ) ; this.label1.tabindex = 5 ; this.label1.text = "注冊(cè)手機(jī)號(hào):" ; this.label2.location = new system.drawing.point ( 88 , 77 ) ; this.label2.name = "label2" ; this.label2.size = new system.drawing.size ( 72 , 16 ) ; this.label2.tabindex = 6 ; this.label2.text = "口令:" ; this.label3.location = new system.drawing.point ( 56 , 128 ) ; this.label3.name = "label3" ; this.label3.size = new system.drawing.size ( 96 , 16 ) ; this.label3.tabindex = 7 ; this.label3.text = "目標(biāo)手機(jī)號(hào):" ; this.label4.location = new system.drawing.point ( 96 , 176 ) ; this.label4.name = "label4" ; this.label4.size = new system.drawing.size ( 72 , 16 ) ; this.label4.tabindex = 8 ; this.label4.text = "內(nèi)容:" ; this.textbox4.location = new system.drawing.point ( 144 , 175 ) ; this.textbox4.multiline = true ; this.textbox4.name = "textbox4" ; this.textbox4.size = new system.drawing.size ( 184 , 48 ) ; this.textbox4.tabindex = 3 ; this.textbox4.text = "" ; this.autoscalebasesize = new system.drawing.size ( 6 , 14 ) ; this.clientsize = new system.drawing.size ( 410 , 303 ) ; this.controls.add ( this.button1 ) ; this.controls.add ( this.textbox4 ) ; this.controls.add ( this.textbox3 ) ; this.controls.add ( this.textbox2 ) ; this.controls.add ( this.textbox1 ) ; this.controls.add ( this.label4 ) ; this.controls.add ( this.label3 ) ; this.controls.add ( this.label2 ) ; this.controls.add ( this.label1 ) ; this.formborderstyle = system.windows.forms.formborderstyle.fixedsingle ; this.maximizebox = false ; this.name = "form1" ; this.text = "visual c#實(shí)現(xiàn)短信發(fā)送" ; this.resumelayout ( false ) ; } |
至此【短信】項(xiàng)目的界面設(shè)計(jì)和功能實(shí)現(xiàn)的準(zhǔn)備工作就完成了,具體如圖04所示:
圖04:【短信】項(xiàng)目的設(shè)計(jì)界面 |
9. 選中【短信】的【解決方法資源管理器】,右擊【引用】,彈出【添加web引用】對(duì)話框。在此對(duì)話框中的【url】文本框中輸入"http://smsinter.sina.com.cn/ws/smswebservice0101.wsdl"后,單擊【轉(zhuǎn)到】按鈕,則會(huì)得到圖05所示界面:
圖05:在【短信】項(xiàng)目中添加web引用的界面 |
此時(shí)單擊圖04中的【添加引用】按鈕,則成功實(shí)現(xiàn)在【短信】項(xiàng)目中添加可發(fā)送短信息的新浪網(wǎng)提供的web service。
10. 把visual stuido .net的當(dāng)前窗口切換到form1.cs的代碼編輯窗口,并用下列代碼替換from1.cs中的button1的click事件對(duì)應(yīng)的代碼,下列代碼的作用是調(diào)用引入的web service中提供的sendxml方法向指定手機(jī)發(fā)送短信息:
private void button1_click ( object sender , system.eventargs e ) { 短信.cn.com.sina.smsinter.smsws ws = new 短信.cn.com.sina.smsinter.smsws ( ) ; string result = ws.sendxml ( "sina" ,textbox1.text ,textbox2.text ,textbox3.text ,textbox4.text ,"new" ) ; messagebox.show ( result ) ; } |
11. 至此,在上述步驟都正確執(zhí)行后,【短信】項(xiàng)目的全部工作就完成了。單擊快捷鍵f5運(yùn)行程序,在輸入【注冊(cè)手機(jī)號(hào)】、【口令】、【目標(biāo)手機(jī)號(hào)】和【內(nèi)容】后,單擊【發(fā)送】按鈕后,程序就會(huì)向指定的手機(jī)號(hào)發(fā)送短信息了。
五.總結(jié):
本文介紹的這種visual c#發(fā)送短信息方法,其解決關(guān)鍵是引用web service,調(diào)用此web service中的方法。通觀全文,此種方法是不是很簡單。最后還要提醒諸位,利用這種發(fā)送短信息并不是免費(fèi)的午餐,其資費(fèi)標(biāo)準(zhǔn)可參看新浪無線網(wǎng)站上的相關(guān)說明,每發(fā)送一條收費(fèi)一角錢,從在新浪網(wǎng)注冊(cè)的手機(jī)上收費(fèi)。在使用本文介紹的方法發(fā)送短信息時(shí),在發(fā)送完成后,一般會(huì)有一個(gè)延遲。這是因?yàn)楹笈_(tái)采用了了消息隊(duì)列機(jī)制,不過這種延遲一般只會(huì)有幾秒鐘的時(shí)間。