1.通過移動網關發送短消息,使用該方法不需要附加的硬件,但是需要到電信部門申請網關,比較適用於壹些大型的網絡通訊公司開發,目前華為,中興等公司就做的這方面的工作,並且還有相應的開發包供開發人員使用.
2.在電腦上通過GSM
MODEM向手機發送中文短消息,這是目前比較適合於小項目開發的壹種方法,所需硬件包括壹款手機,提供GSM
MODEM,以及相應的數據線或是紅外線適配器.該方法編碼簡單,只需對AT指令和串口編程比較熟悉就可以實現,而且對硬件需求不高,並能自動收發短消息.
3.通過壹些網站上提供的短信發送功能來實現,比如新浪網,網易都提供這方面的服務,這種方法是這三種方法中實現起來最簡單,所需資源最少的,但是對於網站的依賴性太強,對網絡的依賴同樣無法避免,不適用於項目開發.
通過第二種方法收發短消息又分為三種模式:Block模式、Text模式和Pdu。使用Block機生產廠家提供驅動支持,現在還沒有發現哪個廠家公布支持這種短信發送模式,而Pdu模式開發起來比較復雜,並且需要編寫專門的函數來將文本轉換為Pdu格式,比較繁瑣.相對而言,應用Text模式開發及方便也簡單,是壹種不錯的選擇,不過使用Text模式開發只能發送ASCII碼,對於中文的Unicode碼不能發送.
使用Text模式發送短信其實很簡單,只要對於AT指令有基本的了解,就能編寫出短消息的發送程序,可是壹直以來介紹該方法的文章卻少之又少,很多人認為使用該方法太簡單,不值壹提.不過對於簡單的應用來說,該方法也不失於壹種不錯的選擇.
短信編碼
在收發短信方面,按時間產生先後,***產生了三種模式:Block Mode、基於AT指令的Text Mode、基於AT指令的PDU Modem, Text Mode比較簡單,多款諾基亞手機均支持該模式。西門子的手機大多只支持PDU模式,PDU模式是發送或接收手機SMS信息的壹種方法,短信息正文經過十六進制編碼後被傳送。目前,PDU已取代Block Mode,因我們主要探討PDU模式的發送。以西門子3508手機為例。
SMS是由Etsi所制定的壹個規範(GSM 03.40 和 GSM 03.38)。當使用7-bits編碼時,它可以發送最多160個字符;但用8-bit編碼,最多可以發送140個字符,通常無法直接通過手機顯示;還有用16-bit編碼時,最多70個字符,被用來顯示Unicode(UCS2)文本信息,可以被大多數的手機所顯示。今天討論的是UCS2編碼,也就是說,最多只能發送70個字符,不管英文還是中文。
現例如我們現在要發送如下信息,向手機13715342642發送"妳好,Hello!"。在沒有發送之前,妳要清楚,手機SIM卡所在地的短信中心號,並不是妳現在所在地方的短信中心號,深圳的短信中心號是:8613800755000,即使到外地,短信中心號仍是深圳。從上面得到了下面的信息:
接收的手機號:13715342642
短信中心號:8613800755000
短信內容:妳好,Hello!
在實際使用中,上面這些信息並不為手機所執行,要進行編碼手機才會執行,先不管,看看編碼後的信息:
0891683108705500F011000D91683117352446F2000800124F60597DFF0C00480065006C006C006F0021
解釋壹下:
08 - 指的是短信中心號的長度,也就是指(91)+( 683108705500F0)的長度
91 - 指的是短信息中心號碼類型。91是TON/NPI遵守International/E.164標準,指在號碼前需加'+'號;此外還有其它數值,但91最常用。
683108705500F0 - 短信息中心號碼。由於位置上略有處理,實際號碼應為:8613800731500(字母F是指長度減1)。這需要根據不同的地域作相應的修改。前面的(08)+(91)+( 683108705500F0)實際上就構成了整個短信的壹部份,通稱短消息中心地址(Address of the SMSC)。
11 - 文件頭字節
00 - 信息類型(TP-Message-Reference)
0D - 被叫號碼長度
91 - 被叫號碼類型
其實在實際處理中,我們通常把11000D91寫死在程序中,因為在國內,這些數據都是不會改變的。
683117352446F2 -被叫號碼,經過了位移處理,實際號碼為"8613715342642"。上面的(00)+(0D)+(91)+( 683117352446F2),構成了整個短信的第二部份目的地址(TP-Destination-Address)。
00 - 協議標識TP-PID,這裏壹般為00
08 - 數據編碼方案TP-DCS(TP-Data-Coding-Scheme),采用前面說的USC2(16bit)數據編碼
00 - 有效期TP-VP(TP-Valid-Period)
12-長度TP-UDL(TP-User-Data-Length),也就是4F60597DFF0C00480065006C006C的長度 36 / 2 = 18 的十六進 12
4F60597DFF0C00480065006C006C 006F0021- 這裏就是短信內容了,實際內容為:"妳好,Hello!"
AT指令