王 剛, 張 鷹, 潘 剛, 李孝杰
(西華師范大學計算機學院, 四川 南充 637002)
SMS是Short Message Service的英文縮寫.手機服務主要有電話語音服務和短信服務(SMS)兩種,后者的價格要比前者低很多.在公司的一些業(yè)務中,公司一般是通過打電話的方式去聯(lián)系員工,但是當員工很多及業(yè)務量很大時這種方式由于價格高、及時性差而影響到了企業(yè)效率.短信服務雖然便宜,但是操作復雜使用不方便.經(jīng)過分析發(fā)現(xiàn),銷售員工主要是向相關管理人員查詢產(chǎn)品的規(guī)格、價格、優(yōu)惠情況等信息.本系統(tǒng)中,服務器對銷售人員的短信內容進行分析,如果是查詢類的短信,系統(tǒng)編輯短信息內容并借助GSM MODEM設備通過串行口自動回復短信;如果是非查詢類的短信,系統(tǒng)則轉入人工服務模式,并提醒相關管理人員進行處理.銷售人員可以及時地獲取所需信息從而大大提高企業(yè)的運行效率[1].
目前,發(fā)送短消息常用Text和PDU(Protocol Data Unit,協(xié)議數(shù)據(jù)單元)模式.使用Text模式收發(fā)短信代碼簡單,實現(xiàn)起來十分容易,但是不能收發(fā)中文短信,主要用于歐美地區(qū).而PDU模式不僅支持英文短信,也能發(fā)送中文短信.
PDU模式收發(fā)短信共有3種編碼方式:7-bit編碼、8-bit編碼和UCS2編碼.7-bit編碼用于發(fā)送普通的ASCII字符.8-bit編碼通常不能在手機上顯示,一般作為數(shù)據(jù)信息,用于發(fā)送數(shù)據(jù)消息如圖片、鈴聲.UCS2編碼是將每個字符(1~2個字節(jié))按照ISO/IEC10646的規(guī)定,轉換為16位的Unicode字符.要發(fā)送中文只能用UCS2編碼.PDU串的用戶信息段最大容量是140字節(jié),3種方式下可發(fā)送的最大字符數(shù)為160、140、70[2].
下面通過例子說明SMS的中文編碼過程[3].
發(fā)送短信息:短消息中心地址(SMSC)號碼是13800260600,對方號碼是13990831020,消息內容是“你好!”,編碼過程如表1所示.
表1 PDU編碼
從手機發(fā)出的PDU串可以是:08 91 68 31 08 20 06 06 F0 11 00 0D 91 68 31 99 80 13 20 F0 00 08 00 06 4F 60 59 7D 00 21.
根據(jù)PDU編碼規(guī)則,UCS2碼采用的是16位雙字節(jié)的編碼方式.gsmEncodeUcs2函數(shù)用于UCS2編碼,gsmDecodeUcs2函數(shù)用于UCS2的解碼,如圖1、圖2所示.在Windows系統(tǒng)中,可以簡單地調用API函數(shù)實現(xiàn)編碼和解碼.如果沒有系統(tǒng)支持,則只能通過查表法獲得.
圖1 gsmEncodeUcs 2函數(shù)工作圖 圖2 gsmDecodeUcs 2函數(shù)工作圖
GSM是一種無線數(shù)字蜂窩通信系統(tǒng)網(wǎng)絡規(guī)范,常用的頻率為900 MHz,1 800 MHz,1 900 MHz.中國的GSM網(wǎng)采用的是雙頻,主要使用900 MHz和1 800 MHz這兩種頻率.除了GSM網(wǎng)外,CDMA、TDMA、PHS、PDC等都支持SMS,因此SMS是一項普及非常廣的業(yè)務[4].經(jīng)過編碼的PDU串中包括接收短信的短消息實體的手機號碼及處理信息的服務中心號碼.
SMS系統(tǒng)采取的是存儲轉發(fā)機制,用戶發(fā)送的短消息通過無線網(wǎng)絡先存儲在短信服務中心,如果接收短信的用戶不在服務區(qū)或沒有開機不能接收短信,則短信一直存儲在短信服務中心,同時不斷地檢測用戶是否出現(xiàn),待用戶出現(xiàn)后SMSC將短信轉發(fā)給短信息實體,這時短信中心會向發(fā)送方短信實體顯示發(fā)送結果狀態(tài).SMSC負責基站與短信息實體間的中繼、存儲、轉發(fā)的工作,實現(xiàn)事務處理能力及信令連接控制部分,并實現(xiàn)短信息業(yè)務管理業(yè)務以及高層的短信息發(fā)送接收功能[5].
不同短信的傳送是相互獨立的,傳送只與用戶和SMSC有關,基于這樣的系統(tǒng)因此能夠保證很高的精確度,實時性較好,并且不與語音業(yè)務相沖突.
本系統(tǒng)以Visual C++6.0作為開發(fā)工具,借助GSM MODEM 之類的設備,開發(fā)了這套用于企業(yè)業(yè)務人員通過手機短信訪問服務器,服務器根據(jù)短信內容進行自動回復從而獲得所需信息的軟件.GSM MODEM通過串行口與服務器相連,服務器通過串行口將SMS傳送給MODEM,MODEM再將短信通過無線網(wǎng)絡傳至SMSC.
短消息是通過串行口進行操作實現(xiàn)的,為了避免大量通信資源引起的通信端口堵塞,系統(tǒng)一方面通過設置的定時器檢測是否有短信息傳入,將其放入接收隊列中,按FIFO的原則對信息進行處理,將處理結果放入發(fā)送隊列;另一方面,系統(tǒng)定時掃描發(fā)送隊列,并按FIFO的原則將SMS發(fā)送給相關的短信息實體.這樣更好的利用了系統(tǒng)資源,按照先進先出的原則對短信息進行處理較好的解決了大批量的信息處理過程中所遇到的問題,增強了系統(tǒng)的穩(wěn)定性,使系統(tǒng)的運行效率得到提高.
圖3 系統(tǒng)運行圖
本系統(tǒng)使用的MODEM由短信收發(fā)模塊及單片機(MCU)組成.短信收發(fā)模塊負責GSM基站與MCU之間的通訊,MCU負責MODEM和服務器的通信,同時負責短信收發(fā)模塊的相應動作.所使用的MODEM的核心模塊由WAVECOM Q2403A模塊組成,支持雙頻即使用EGSM 900 MHz與GSM 1 800 MHz,基于RS-232接口,因此跟普通手機相比效率較高,穩(wěn)定性較好.用戶常用兩種方法進行短信貓開發(fā)的應用,一種是基于底層的開發(fā)模式,即通過串行口用AT指令驅動短信貓收發(fā)短信,這種方法需要對AT指令相當熟悉才行;另一種是使用MODEM廠商基于串口AT指令集成的應用開發(fā)包,用戶操作很簡便,只需直接調用短信收發(fā)API即可[6].
通過WINDOWS自帶的超級終端來檢測MODEM的運行情況.將COM口的每秒位數(shù)設為9 600,數(shù)據(jù)位設為8,奇偶校驗為無,停止位為1,數(shù)據(jù)流控制設為無.輸入AT,回車,顯示“OK”則鏈接正常,顯示“error”表示連接異常[7].
計算機可以直接通過串行口下達AT命令控制SMS的發(fā)送、接收、管理.AT指令是計算機操作MODEM的唯一途徑,各個廠商的AT指令可能不盡相同,但是變化不會特別大,如:
AT+CMGF=0; //設置SMS編碼方式為PDU格式,如果為1則為文本格式
AT+CMGR=1; //設置讀取第一條短信,如為6則為讀取第6條短信
為了能夠讀取短信貓當前接收的短信,在獲取短信內容時實時將短信刪除.這樣,短信貓中就沒有已存短信了,當從MODEM中讀取短信息時,始終獲得的都是最新的短信貓接收的短信.為了避免因為使用了不同的MODEM所造成的不便,本系統(tǒng)設置了一個獲取短信貓使用的短信號、波特率、機器號碼等信息的模塊,并將這些信息存放在一個文件中[8].系統(tǒng)運行過程如圖3所示[9].
以下是部分核心代碼:
// AllData 為短信貓里的信息Phone為電話號碼, MessageText為短信內容
AllData = (char*)GSMModemSMSReadAll(0);//0表示實時刪除短信貓中的信息
if (AllData != NULL) //獲取短信內容及電話號碼的總長度Len
{int Num = 0,Content = 0;int phonenum = 0 ; //一個電話號碼和一條短信
for(int i=0;i {if(AllData[i] == ‘|’) {phonenum+=1;}if(phonenum == 0) {……}//獲得手機號碼 else if(phonenum==1 && AllData[i]!=‘|’){……}//獲得短信內容 if(phonenum==3 && AllData[i-1]==‘|’) { strPhone.Format(“%s”,number);strNote.Format(“%s”,msgContent); ……………//將電話號碼及短信內容轉換為字符串} }} …………//用m_AdoConn連接數(shù)據(jù)庫 sql.Format(“select * from tb_phonebook where 電話號碼=‘%s’”,strPhone); if(!m_AdoConn.m_pRecordset->adoEOF) {m_Name = (char*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect(“姓名”); if(“CX”==str.Left(2)){…………}//strNote的前兩個字符是否為CX,是則進入自動回復模塊 else{…………}//不是則進入人工服務模塊 }else m_Name = “新號碼”;…………//進入人工服務模塊 短信服務高效、經(jīng)濟、快捷,在很多行業(yè)都能發(fā)揮自己的優(yōu)勢.但是手機編寫短信往往比較慢,而且麻煩,這給人們帶來了很大的不變.本系統(tǒng)以 Visual C++6.0作為開發(fā)工具,使用串口發(fā)送短信,將手機與計算機緊密聯(lián)系起來.由于本系統(tǒng)將手機短信應用于企業(yè)的業(yè)務管理,服務器終端能自動回復大部分查詢類的短信息,同時對非查詢類短信也可以人工服務,從而解決了很多公司的業(yè)務人員與公司聯(lián)系不便、實時性差、語音聯(lián)系又過于昂貴的問題. 但是隨著MMS( Multimedia Messaging Service)的發(fā)展,彩信業(yè)務的發(fā)展成為必然.本系統(tǒng)目前不能將文本、圖像、聲音、視頻等集成在一起,這是本系統(tǒng)在以后重點研究的一個方向[10]. [1]潘崢嶸, 徐 猛. 基于GSM短消息的水渠水位自動測報系統(tǒng)[J]. 計算機工程,2007,33(7):234-236. [2] 管恩花,尚傳進,張曉峰.VC++實現(xiàn)PC通過串口收發(fā)手機短消息[J].計算機應用研究,2005,22(8):215-219. [3] 沙 泉. 基于嵌入式Linux的短信收發(fā)系統(tǒng)設計[J]. 微計算機信息, 2007,23(35):90-92. [4] 聶捷楠,葛 波,任 偉. 基于手機短信的電子商務平臺設計與實現(xiàn)[J]. 微計算機信息,2006,22(27):220-222. [5] 楊子華,胡 倩,凌江榮. 基于智能手機平臺的SMS系統(tǒng)設計與實現(xiàn)[J]. 通信技術,2007,40(9):70-72. [6] 劉通良,潘仕彬.核環(huán)境下基于GSM SMS的無線通信平臺的實現(xiàn)[J]. 核電子學與探測技術, 2007,27(6):1 252-1 255. [7] 謝春祥,張 虹,聶余滿.基于GSM/GPRS 的終端式短信平臺開發(fā)[J].計算機工程與設計,2007, 28(7):1 680-1 729. [8] 李 言,李偉明,李 賀.Visual C++項目開發(fā)全程實錄[M].北京:清華大學出版社,2008:74-106. [9] 史 永,楊 英,陳 強,等. 面向自動回復的公交SMS平臺的研究和實現(xiàn)[J].計算機工程,2007,33(21):252-254. [10] 王徳文,朱永利, 邸 劍,等. 面向電力系統(tǒng)實時通信的MMS協(xié)議[J].電力自動化化設備,2009,29(27):101-104.3 結束語