第二章 簡訊服務的概念與應用
2.4 簡訊發送元件
2.4.1 計算機與手機模組的通信
AT+CMGL
List SMS message from preferred store(列出 SIM 卡中的簡訊 PDU/text: 0/“REC UNREAD”-未讀,1/“REC READ”-已讀,
2/“STO UNSENT”-待發,3/“STO SENT”-已發,4/“ALL”-全部的)
AT+CMGR Read SMS message(讀簡訊)
AT+CMGS Send SMS message(發送簡訊)
AT+CMGW Write SMS message to memory(向 SIM 記憶體中寫入待發的簡 訊)
AT+CMSS Send SMS message from storage(從 SIN|M 記憶體中發送簡訊)
AT+CNMI New SMS message indications(顯示新收到的簡訊)
Web server
USB 介面之紅外線傳輸模組
Nokia 8210 圖2-7 簡訊發送之硬體架構圖
AT+CPMS Preferred SMS message storage(選擇簡訊記憶體)
AT+CSCA SMS service center address(簡訊中心位址)
AT+CSCB Select cell broadcast messages(選擇蜂窩廣播消息)
AT+CSMP Set SMS text mode parameters(設置簡訊本文模式參數)
AT+CSMS Select Message Service(選擇簡訊服務)
圖2-8 SMS相關的AT指令集
計算機與手機模組是經由RS-232串列埠連結,故只需將其連接到計 算機的串列埠即可。下圖是使用Windows內建的Hyper Terminal來測試 計算機與手機模組的連接。
由程式集→附屬應用程式→通訊→超級終端機打開,在輸入連接的 名稱後。選擇相對應的串列埠
圖2-9 選擇串列埠
將埠口參數設置為:速率-115200、奇偶校驗位-none、數據位-8、
停止位-1、流量控制-硬體。
圖2-10 設定串列埠參數
輸入“AT”,螢幕上返回“OK”表明電腦與手機模組已連接成功,
能夠正常工作。這時就可以測試各類AT命令。
當測試命令“AT+CMGF<CR>”時,如果返回“OK”標明手機模組支 援該項指令。
如果此時手機模組處於PDU Mode(即“AT+CMGF=0<CR>)
AT+CMGS=<length><CR>
>PDU is given<^Z/ESC>
如果短消息發送成功,則返回“OK”,並顯示錯誤訊息:
+CMGS: <mr>[,<ackpdu>]
如果短消息發送失敗,則返回如下錯誤訊息:
+CMS ERROR: <err>
圖2-11 測試指令 2.4.2 程式實作
簡訊發送元件 編碼
與手機模組傳輸
簡訊中控程式 偵測 Comport # 記錄 Comport 資料 傳輸內容
GSM Modem/Mobile device
COM port 設定檔
設定值
AT 指令、訊息
圖2-12 簡訊發送程式分析
雖然 VB.NET 中可匯入 VB 的MSComm.ocx(Micrsoft Comminication Control)
通信程式從CreateFile指定串列埠設備及相關的操作屬性。CreateFile() 函數中有幾個必須注意的參數設置:串列埠共享方式應設為 0,串列埠 為不可共享設備;創建方式必須為OPEN_EXISTING,即打開已有的串口。
對於dwFlagAndAttribute參數,對串口有意義的值是 FILE_FLAG_OVERLAPPED, 表明串列埠採用非同步通信模式,可進行重疊操作;若值為NULL,則
GetCommState(mhRS, uDcb)讀取目前埠口設備控制區塊DCB(Device Control Block)
設置,修改後通過SetCommstate(mhRS, uDCB)將其寫入。再需注意非同步讀 寫的超時控制設置,通過COMMTIMEOUTS結構設置超時,調用
SetCommTimeouts(mhRS, uCtm)將結果寫入。以下是埠口初始成員函數:
Public Overloads Sub Open()
Dim uDcb As DCB, iRc As Integer ' 取得目前DCB ' 設定工作模式
Dim iMode As Integer = Convert.ToInt32(IIf(meMode = Mode.Overlapped, _ FILE_FLAG_OVERLAPPED, 0))
PurgeBuffers.TxClear)
主要運用ReadFile()與WriteFile()API 函數,若為非同步通信方式,兩函
數中最後一個參數為指向OVERLAPPED結構的非空指標,在讀寫函式返回值
為FALSE的情況下,調用 GetLastError()函數,返回值為ERROR_IO_PENDING,表明
I/O 操作懸掛,即操作轉入後台繼續執行。此時,可以用WaitForSingleObject()
"Read operation error " & iLastErr.ToString)
定義全堿變數 m_CommPort 為 Rs232 的物件,通過調用類別的成 員函數即可實現所需的串列埠通信功能。
4. 偵測 COM Port number
一開始先開啟簡訊中控程式,偵測目前可使用的 COM Port number。
Private Function IsPortAvailable(ByVal ComPort As Integer) As _ Boolean Try
m_CommPort.Open(ComPort, 115200, 8, _ rs232.Rs232.DataParity.Parity_None, _ rs232.Rs232.DataStopBit.StopBit_1, 4096) m_CommPort.Close()
偵測 Com Port 是否為 Modem。
Private Function IsPortAModem(ByVal port As Integer) As Boolean Try
m_CommPort.Open(port, 115200, 8, rs232.Rs232.DataParity.Parity_None, _ rs232.Rs232.DataStopBit.StopBit_1, 4096)
m_CommPort.Write(Encoding.ASCII.GetBytes("AT" & Chr(13))) System.Threading.Thread.Sleep(200)
Application.DoEvents() Try
Dim b As Byte m_CommPort.Read(1)
m_CommPort.ClearInputBuffer() m_CommPort.Close()
Return True Catch exc As Exception m_CommPort.Close() Return False End Try
Catch exc As Exception
Me.clstPorts.SetItemChecked(port - 1, False)
MsgBox("Could not open port.", MsgBoxStyle.OKOnly, Me.Text)
Return False End Try
End Function
5. 發送簡訊函式
Public Function sendsms(ByVal msg As String) As String
m_CommPort.Open(4, 115200, 8, rs232.Rs232.DataParity.Parity_None, _ rs232.Rs232.DataStopBit.StopBit_1, 4096)
m_CommPort.Write(Encoding.ASCII.GetBytes("AT" & Chr(13))) System.Threading.Thread.Sleep(200)
m_CommPort.Write(Encoding.ASCII.GetBytes("AT+CMGF=0" & Chr(13))) System.Threading.Thread.Sleep(200)
m_CommPort.Write(Encoding.ASCII.GetBytes("AT+CMGS=" & "14" & Chr(13))) System.Threading.Thread.Sleep(200)
m_CommPort.Write(Encoding.ASCII.GetBytes(msg & Chr(26))) System.Threading.Thread.Sleep(200)
m_CommPort.Close() End Function
第三章 系統實作
3.1 系統架構
簡訊服務系統朝向結合全球資訊網(World Wide Web, WWW)方向 規劃,採用了「三層式主從架構」的程式設計觀念,這種觀念包含使 用者介面層、含有企業邏輯的中間層以及資料庫層。以三層式架構 Browser-WEB-Application為主幹,並且以目前使用者最多之關聯式資 料庫為整個系統之資料庫伺服器(Database Server),使用者端朝向Thin Client於微軟視窗作業系統建置瀏覽器(Browser),以減輕未來應用系統 之維護管理事宜,網站伺服器結合應用程式伺服器,支援網路伺服器 的工作、資料庫連結與手機無線模組之資料傳送。並以物件導向技術 來分析設計整個應用軟體系統,然後透過網路系統來控管與傳送使用 者端所需要的處理、傳送和接收之各式資料。
手機無線模組經由Rs-232與網站伺服器相連結,本專題中使用 Nokia 8210手機取代GSM/GPRS數據機,並利用USB介面之紅外線傳輸 線來傳送資料,以降低實作成本。
圖 3-2 3 層式主從架構圖 圖 3-1 簡訊服務網路系統架構
3.2 資料庫設計 3.2.1 SQL 簡介
結構化查詢語言(Structured Query Language)是一種對資料庫查 詢、存取與管理的標準語言,SQL 是特別針對主從運算所設計的高伸縮
3. 因為資料表變小、變多,所以整個資料庫有更多的叢集索引 (clustered index),且每個索引都可以更有效地涵蓋資料。
正規化的步驟:
STEP 1:將表格中的變動項目展開來,其結果即為一級正規化。
STEP 2:其次移去部分相關性(Partial dependency)得到二級正規 化。
STEP 3:再來消除關聯間之遞移相關(Transitive dependency)最後 得到三級正規化。
圖 3-3 正規化步驟圖
第一正規化的表格必須合以下條件: 功能相依(Functional Dependency)。
第三正規化的表格必須合下面條件: 有一份通訊錄 FriendList 存放會員的好友電話,在簡訊資料庫方面以 CanMessageIndex 來存放每一個罐頭簡訊的資料以及屬性,其他鈴聲圖 片的資料表也是如此並且有一個外部 KEY 來說明他的類別。
圖 3-4 資料庫關聯圖
資料庫關聯圖說明
ImageID:是圖片的編號是圖片資料表的主 KEY ImagePath:是存放圖片所在位置的路徑
ImageTypeID:是用來表示圖片的類型,並且為各資料表的外部 KEY MemberId:是會員的流水編號,並且為會員資料表的主 KEY,也是各資 料表的外部 KEY,用來表示圖片的作者。
ImageType:是用來說明 ItypID 的屬性
MessageID:是表示簡訊的編號,並且為簡訊資料表的主 KEY Message:用來存放簡訊的內容
MessageTypeID:是用數字來表示圖片的類型,並且為簡訊資料表的外 部 KEY
RingID:是用來存放圖片的編號,並且為音樂資料表的主 KEY RingCode:是存放鈴聲的編碼
RingTypeID:是用來表示音樂類型的代碼,也是音樂資料表的外部 KEY Email:為會員的 E-mail,並且為登入帳號
Sex:會員性別
Birthday:會員生日
Join_Date:加入會員的日期 Password:為會員登入的密碼 Mem_Name:為會員的真實姓名 UserLevel:為使用者權限 Telephone:為會員的電話
FriendName:是用來存放會員的朋友姓名
FriendPhone:是用來放會員朋友的電話,朋友的資料表仍然用 MbrID 會員資料表來查詢朋友資料表的外部 KEY
罐頭簡訊系統資料表
罐頭簡訊資料表主要的屬性有罐頭簡訊的流水編號、簡訊內容、簡訊 的類別編號、由於簡訊的類別有太多重複的所以加入一個類別編號並 設其外 foreign key 來表示次簡訊的類別至於其他的鈴聲圖片都是以 此法來表示他的類別,用來避免資料重複。
圖 3-5 簡訊資料表 會員資料表
會員資料表是由會員流水編號、會員的 E-MAIL、密碼、會員姓名、
性別、生日、地址、電話、加入日期、使用者等級所組成並且使用一 個 FriendList 作為通訊錄、再以會員流水編號作為 Foreign key 來跟 會員基本資料表作一對一關係。
圖 3-6 會員資料表
3.3 網站系統架構分析
本系統以使用者觀點來看,主要分成五大子系統,1.會員管理註冊 系統、2.文字簡訊服務系統、3.鈴聲服務系統、4.圖片服務系統、5 計費系統,並且使用網路作為相互連結與溝通的管道。
1. 會員管理註冊系統
使用者在進入子系統前,需先註冊並登入會員方可使用。會員管理 註冊系統提供會員註冊、登入、修改及查詢發送記錄等功能。
2. 文字簡訊服務系統
使用者使用時需先登入網站會員,文字簡訊服務系統分為文字簡訊 與罐頭簡訊。
A. 文字簡訊在輸入接收端號碼及發送內容確認後,傳送成功後將 費用記入其會員帳號中。
B. 罐頭簡訊在用戶進入後,直接點選喜愛的簡訊,並輸入接收端 號碼及發送內容,傳送成功後將費用記入其會員帳號中。
使用者
會員管理註冊系統 文字簡訊服務系統 鈴聲服務系統 圖片服務系統 計費系統
圖 3-7 系統階層圖
3. 鈴聲服務系統
使用者使用時需先登入網站會員,鈴聲服務系統分為自編鈴聲與鈴 聲下載。
A. 自編鈴聲在編輯好鈴聲並按下確認後,會將鈴聲格式傳送到發 送網頁,輸入接收端號碼及發送內容,傳送成功後將費用記入 其會員帳號中。
B. 鈴聲下載在用戶進入後,直接點選喜愛的鈴聲,並輸入接收端 號碼及發送內容,傳送成功後將費用記入其會員帳號中。
4. 圖片服務系統
用戶進入「圖案簡訊」後,直接點選喜愛的圖片,並輸入接收端號 碼及發送內容,傳送成功後將費用記入其會員帳號中。
5. 計費系統
用戶在簡訊傳送成功後將費用記入其會員帳號中,在點選進入「我 的簡訊」後,可以查詢簡訊發送記錄。
使用者必須先進行會員註冊而後登入網站才能使用子系統所提供 的功能。
YES NO
首頁
會員註冊 會員登入
會員資料填寫 開放功能首頁
資料是 否完整?
會員資料修改 發送圖片 發送鈴聲 發送簡訊
註冊成功 YES
發送介面 成功?
計費系統
發送成功?
顯示發送成功訊息 顯示發送失敗訊息
圖 3-8 網站系統流程圖
3.3.1 會員管理註冊系統 系 統 功 能
會員管理註冊系統提供了 4 個功能:
1. 註冊會員:使用者可以註冊自己的會員資料。包括會員帳號、會員 密碼、姓名、電話、生日、住址…等基本資料。
2. 會員登入:使用者在進入登入頁面後,當使用者輸入正確的帳號密 碼,會由 session 檢查登入狀態。以避免使用者在沒有權限的情況
2. 會員登入:使用者在進入登入頁面後,當使用者輸入正確的帳號密 碼,會由 session 檢查登入狀態。以避免使用者在沒有權限的情況