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