杜海舟,張 超,劉 昊
(上海電力學(xué)院計算機(jī)與信息工程學(xué)院,上海 200090)
隨著現(xiàn)代化通訊方式的迅速發(fā)展,手機(jī)功能不斷增加,手機(jī)用戶越來越多.截至2009年7月末,中國移動電話用戶超過7億戶.而在2008年前,這個數(shù)字還只不過是1億.其中高校學(xué)生使用手機(jī)已經(jīng)越來越頻繁,學(xué)生使用手機(jī),除了增加一條獲取信息的渠道外,更為學(xué)校與學(xué)生間的聯(lián)系拓展了一條渠道.
手機(jī)相較于其他常見的通訊平臺,有著即時、可靠、安全等優(yōu)勢,因此本系統(tǒng)選用了短信平臺進(jìn)行研發(fā),目的是讓學(xué)生通過便捷的操作獲取更多的信息.
本系統(tǒng)構(gòu)建了一套短信處理平臺,實(shí)現(xiàn)了高校成績查詢這一主要功能,即學(xué)生通過發(fā)送指定格式的短信到短信平臺,就可以獲取相關(guān)的成績信息,同時也可實(shí)現(xiàn)基于網(wǎng)頁的平臺管理、查詢和簡單的分析功能.
本平臺通過使用RXTX(串口和并口通信的開源Java類庫)和USB接口的GSM調(diào)制解調(diào)器得以實(shí)現(xiàn).RXTX 提供了 Windows,Linux,Mac os X,Solaris操作平臺下的兼容javax.comm串口通訊包API,通過使用該通訊包,可以實(shí)現(xiàn)向串口寫入和讀出字符串的功能[1].
AT即Attention,AT指令集是通過終端設(shè)備(Terminal Equipment,TE)或數(shù)據(jù)終端設(shè)備(Data TerminalEquipment,DTE)向終端適配器(Terminal Adapter,TA)或數(shù)據(jù)電路終端設(shè)備(Data Circuit Terminal Equipment,DCE)發(fā)送.通過TA,TE發(fā)送AT指令來控制移動臺(Mobile Station,MS)的功能,與GSM網(wǎng)絡(luò)業(yè)務(wù)進(jìn)行交互.表1中列出了常用的一些AT命令和使用方法[2].
表1 常用AT命令
短信傳送一般采用 Text和協(xié)議數(shù)據(jù)單元(Protocol Data Unit,PDU)兩種模式.
基于AT命令的Text模式是利用文本信息控制移動臺短信的方式,主要利用AT命令集完成對移動臺的各種操作,包括與短信相關(guān)的各種操作.但Text模式難以支持非ASCII碼字符,因此在開發(fā)中較少采用.PDU模式也采用AT命令集來控制移動臺的短信功能.它在AT命令中直接采用協(xié)議數(shù)據(jù)單元PDU,相當(dāng)于將Text模式中字符串格式的命令轉(zhuǎn)換成十六進(jìn)制命令格式,它可以支持不同的編碼格式,可以發(fā)送中文字符,而且便于編程,因此在開發(fā)中常采用此模式.
表2所列元素是用于發(fā)送方(SMS-SUBMIT)的PDU和接收方(SMS-DELIVER)的PDU中各元素的相關(guān)內(nèi)容.在發(fā)送方和接收方的PDU中,這些元素按照規(guī)定的順序排列,在發(fā)送和接收時,要根據(jù)其格式對PDU進(jìn)行編碼或解碼[3].
表2 PDU所含元素
根據(jù)日常短信管理的需要,成績查詢系統(tǒng)分為系統(tǒng)管理和對外功能兩個主要子系統(tǒng).其中,系統(tǒng)管理由查詢平臺的系統(tǒng)管理員使用,可對整個成績查詢系統(tǒng)進(jìn)行監(jiān)控、查詢、修改,以及進(jìn)行相關(guān)設(shè)置;個人應(yīng)用子系統(tǒng)供廣大學(xué)生使用,每個學(xué)生都可以通過發(fā)送短信的方式使用系統(tǒng)提供的各項服務(wù).本系統(tǒng)的主要功能模塊如圖1所示.
(1)登錄、注冊、添加管理員模塊 由超級管理員添加其他的管理員,并賦予不同的權(quán)限,如查詢設(shè)置、修改設(shè)置操作能否進(jìn)行等.
(2)查詢系統(tǒng)信息發(fā)送情況模塊 查詢系統(tǒng)信息的接收與發(fā)送情況.通過選擇日期,返回某天的成績查詢平臺使用情況,包括接收到的信息總數(shù)、發(fā)送的信息總數(shù)、成功的數(shù)目和失敗的數(shù)目等.該模式也支持按月、季度、年度的統(tǒng)計查詢功能.
(3)參數(shù)設(shè)置模塊 用以設(shè)置整個成績查詢平臺的開關(guān),以及硬件的一些參數(shù)(如端口號、短信中心號碼等).
(4)查詢成績模塊 學(xué)生發(fā)送指定格式的短信(即cxcj+學(xué)號+密碼)至成績查詢平臺的手機(jī)號碼,系統(tǒng)則返回本學(xué)期所有科目的考試成績及相關(guān)信息.
(5)已修學(xué)分查詢模塊 學(xué)生發(fā)送指定格式的短信(即cxxf+學(xué)號+密碼)至成績查詢平臺的手機(jī)號碼,系統(tǒng)則返回本學(xué)期已修學(xué)分相關(guān)信息.
(6)修改密碼模塊 學(xué)生發(fā)送指定格式的短信(即xgmm+學(xué)號+舊密碼+新密碼)至成績查詢平臺的手機(jī)號碼,系統(tǒng)會提示密碼是否修改成功等信息.
圖1 成績查詢系統(tǒng)主要功能模塊
針對學(xué)生個人用戶進(jìn)行成績查詢,系統(tǒng)要求用戶按照指定的格式發(fā)送短信到平臺的手機(jī)號碼,成績查詢平臺在接收到短信后,首先對其格式進(jìn)行判斷.若格式錯誤,返回錯誤提示信息;若格式無誤,再根據(jù)短信中提供的學(xué)號、密碼等信息對學(xué)生的基本信息進(jìn)行驗證.若學(xué)生學(xué)號或者密碼不正確,則返回錯誤信息;若學(xué)生信息驗證無誤,則成績查詢系統(tǒng)將到相應(yīng)的數(shù)據(jù)庫中查詢學(xué)生成績,并通過短信將查詢結(jié)果返回到發(fā)送短信的學(xué)生手機(jī)上.其具體流程如圖2所示.
學(xué)生已修學(xué)分查詢和修改密碼模塊也和上面的流程基本相似.學(xué)生可以按照指定的短信格式,通過手機(jī)向成績查詢系統(tǒng)中心發(fā)送短信,然后成績查詢平臺將會根據(jù)具體的代碼格式來提取信息,并分析具體業(yè)務(wù),然后執(zhí)行相應(yīng)的操作.若中間某個部分出錯,也會相應(yīng)地通過短信返回錯誤信息給發(fā)送短信的用戶.若操作成功,則會返回正確信息或者查詢結(jié)果.
圖2 短信平臺成績查詢功能流程
由于Java語言的開放性及良好的網(wǎng)絡(luò)特性,本成績查詢平臺前臺開發(fā)全部采用Java語言,后臺數(shù)據(jù)庫采用Oraclelog數(shù)據(jù)庫.
根據(jù)串口和并口通信的開源Java類庫,首先聲明一個SerialPort類型的對象serialPort,該對象類似于把端口進(jìn)行實(shí)例化,并打開端口,為該端口注冊一個監(jiān)聽者(Listener),主要用于對端口返回的字符串進(jìn)行響應(yīng).然后設(shè)置端口的參數(shù),包括端口的波特率、數(shù)據(jù)位、停止位、奇偶校驗等,同時還要定義一個InputStream類型的對象inputStream(用于獲取端口的輸入流對象),以及一個OutputStream類型的對象outputStream(用于向端口寫入字符的輸出流對象).通過這兩個對象可以得到真正的字符流.
具體代碼如下:
由此可基本實(shí)現(xiàn)成績查詢平臺系統(tǒng)的USB串口通訊.
AT命令是通過定義的OutputStream對象和inputStream對象來實(shí)現(xiàn)其功能的.它首先分析返回字符流中包含的關(guān)鍵字,再根據(jù)對應(yīng)命令的格式對字符流進(jìn)行處理.
首先,定義一個StringBuffer類型的對象sb,再把字符流保存至sb中.由于字符流中會含有回車符,因此在讀取時要用到一個循環(huán).字符流讀取完后,就要將其首部的7個字符取出,這7個字符的格式為“AT+命令代碼”,提取出命令代碼,才可以判斷出該命令的類型,并進(jìn)行相應(yīng)的操作.當(dāng)收到新的短信時,設(shè)備不會馬上顯示出其中的內(nèi)容,而是給出其在SIM卡中的位置,讀取信息時,直接使用命令“AT+CMGR=index”,設(shè)備會返回一個包含“CMGR”的字符流,用同樣的方法取出字符流的內(nèi)容,并截取出其中PDU的內(nèi)容作進(jìn)一步處理.
然后,按照PDU的格式,將其中有用的信息取出.在這里,主要包括發(fā)送方的號碼(OA)、編碼方式(DCS)和短信內(nèi)容(UD).先取出OA的長度,在PDU中這一長度是不固定的,因此后面的所有位置都要根據(jù)這一長度來確定.得到這一長度后,便可以確定編碼方式的位置.解碼后便可得到短信的有用信息.
最后把內(nèi)容存到其他介質(zhì)(如本地的數(shù)據(jù)庫等)上,并把該條短信息從SIM卡上刪除,以避免由于SIM卡中短信存滿而無法接收新的信息.
基于上面的操作就可以在服務(wù)器端獲得短信中所有有用的信息.
成績查詢系統(tǒng)提取短信內(nèi)容,首先要求對7-bit編碼的算法進(jìn)行解碼,根據(jù)其解碼原理,設(shè)計相應(yīng)方法decode7bit,其中code為經(jīng)過7-bit方式編碼的十六進(jìn)制字符串.
具體實(shí)現(xiàn)過程如下:首先聲明兩個字符串,其中content用于保存最終得出的短信內(nèi)容,code_bytes用于保存解碼中間環(huán)節(jié)產(chǎn)生的二進(jìn)制碼串.然后進(jìn)行如下循環(huán)操作,具體代碼如下:
在上述循環(huán)中,將code字符串中十六進(jìn)制碼按兩位一組進(jìn)行處理,每一組分為高位和低位,將它們轉(zhuǎn)換成二進(jìn)制后,分別存入字符串h和l中.在轉(zhuǎn)換中會省略第一個非零有效位前的零,因此需對其進(jìn)行補(bǔ)足,以保證最后這兩位十六進(jìn)制數(shù)被轉(zhuǎn)換為等值的兩個4位的二進(jìn)制數(shù)保存在字符串ch中.需要指出的是,在生成code_bytes時,ch是被逆序插入的.聲明一個con_bytes的String型數(shù)組保存移位后的二進(jìn)制數(shù),其中每個元素長度應(yīng)均為7.并定義3個標(biāo)志符.最后再把con_bytes中各個元素轉(zhuǎn)換成英文字母、標(biāo)點(diǎn)或數(shù)字.
至此整個解碼過程完成.
向平臺號碼發(fā)送“cjcx+學(xué)號”,即可得到平臺的回復(fù)信息,同時短信平臺會記錄查詢學(xué)生所有信息,發(fā)送方手機(jī)會收到一條短信,返回該同學(xué)本學(xué)期的所有考試成績,如圖3所示.成績查詢系統(tǒng)記錄查詢信息如圖4所示.在成績查詢系統(tǒng)的服務(wù)器端,也會把該學(xué)生的幾次查詢信息全部記錄下來,以方便管理員查詢.
圖3 手機(jī)返回查詢結(jié)果
圖4 平臺記錄查詢信息
目前本系統(tǒng)已在上海電力學(xué)院得到初步應(yīng)用,但本系統(tǒng)的功能還較為簡單,許多管理功能有待繼續(xù)開發(fā).例如發(fā)送圖書逾期通知,或?qū)⒅v座、招聘會等與學(xué)生相關(guān)的實(shí)用信息主動發(fā)送給需要的學(xué)生等.
短信平臺作為一種方便快捷的通訊手段,在高校中的應(yīng)用前景非常廣闊.相信隨著技術(shù)的不斷發(fā)展,短信平臺還可以開發(fā)出更多的功能,為廣大師生提供更貼心的服務(wù).
[1]陸垂偉,毛雪濤,戴翔宇,等.遠(yuǎn)程串行數(shù)據(jù)通信技術(shù)的實(shí)現(xiàn)方法及其應(yīng)用[J].計算機(jī)應(yīng)用研究,2002(3):23-25.
[2]唐明董,張俊波,劉建勛.基于GSM模塊的短信平臺服務(wù)器設(shè)計與實(shí)現(xiàn)[J].微計算機(jī)應(yīng)用,2007(2):174-177.
[3]范磬亞,徐汀榮,成軍.基于GSM/SMS的校園短信通研究[J].計算機(jī)與現(xiàn)代化,2006(3):100-102.
[4]邢艷芳,段洪秀,湯銘.校園短信平臺設(shè)計[J].計算機(jī)時代,2009(10):32-33.
[5]呂淑萍,王偉.基于GSM短信的信息管理系統(tǒng)開發(fā)[D].哈爾濱:哈爾濱工程大學(xué),2006.