利用VB 實現短消息收發

發表于:2007-05-25來源:作者:點擊數: 標簽:收發短消息實現利用
利用VB 實現短消息收發 摘要:近來,筆者用VB 開發 了一套PC 機上的短消息收發軟件,本文根據筆者的實際開發經 驗整理而得。文中介紹了在計算機上實現短消息收發的模式,重點描述了PDU 模式,包括 PDU 模式下的UCS2 編碼、解碼原理,以及發送與接收PDU 串的

利用VB 實現短消息收發
摘要:近來,筆者用VB 開發了一套PC 機上的短消息收發軟件,本文根據筆者的實際開發
驗整理而得。文中介紹了在計算機上實現短消息收發的模式,重點描述了PDU 模式,包括
PDU 模式下的UCS2 編碼、解碼原理,以及發送與接收PDU 串的編制方式,在此基礎上介紹
了利用VB 中的MSCOMM 控件,實現短消息收發的核心程序。
關鍵字:短消息收發、PDU 模式、UCS2 編解碼、UNICODE 碼、AT 指令、MSCOMM 控件
正文:
現在,短消息收發軟件得到越發廣泛的應用,從政府機關、學校到廣大的傳媒機構,
直至諸多的企事業單位,頗受使用者歡迎。首先,手機用戶的普及為這類軟件的出現提供了
可能,而使用這類軟件,與人們傳統慣用的打電話、發電子郵件等通訊方式相比,有獨到的
優點,它能將信息及時送達對方,不會像查收信件(或電郵)存在時間上的延誤,也不存在
類似于打電話占線或無人接聽之類的煩惱;短消息收發軟件可以實現消息收發雙方的實時交
互,用它還可以實現消息的群體發送或定時發送等。最近,筆者嘗試用VB 來開發一套實現
短消息收發功能的信息系統。至提筆之時,整套系統已經開發完畢。鑒于篇幅的原因,筆者
不可能將整個系統一一盡數,而只能將開發過程中與短消息收發功能相關的一些技術要點和
心得體驗與眾讀者進行分享。
一、短消息收發的實現模式
目前,計算機串口上連接GSM MODEM,用它向手機發送短消息,是比較適合于小型項目
開發的一種實現模式。這種方法要求對AT 指令集和串口編程比較熟悉。在開發過程中筆者
使用的是索尼愛立信公司的GM29 模塊。
這種方法收發短消息又分三種模式:BLOCK 模式、TEXT 模式和PDU 模式。BLOCK 模式已
是昔日黃花,現在用的很少了; TEXT 模式則只能發送ASCII 碼,它不能發送中文的UNICODE
碼——確切地講,從技術上來說是可以用于發送中文短消息的,但是國內的手機基本上不支
持;而PDU 模式開發起來則較為復雜,它需要編寫專門的函數來將文本轉換為PDU 格式,但
PDU 模式被所有手機支持,可以使用任何字符集,它也是手機默認的編碼方式。筆者在開發
中正是選用的PDU 模式。
二、PDU 模式
用PDU 模式收發短消息可以使用三種編碼: 7-bit 編碼、8-bit 編碼和UCS2 編碼。 7-bit
編碼用于發送普通的ASCII 字符;8-bit 編碼通常用于發送數據消息,如圖片或鈴聲等;UCS2
編碼用于發送Unicode 字符。由于筆者在系統中要實現中文短消息的發送,所以選擇用UCS2
編碼,即中文Unicode 碼。
(一)UCS2 編碼原理
所謂UCS2 編碼,是將單個的字符(1-2 個字節)按ISO/IEC10646 的規定,轉變為16 位
的Unicode 寬字符。即將單個的字符轉換為由四位的‘0’-‘9’、 ‘A’-‘F’的數字和字
母組成的字符串。待發送的消息以UCS2 碼的形式進行發送。
先介紹VB 中的Ascw()和Hex()函數。Ascw()函數用來求出字符串的Unicode 值;Hex()
函數返回表示十六進制數字值的字符串。對這兩個函數用例子來說明:
?Ascw("您")
24744
?Hex(24744)
60A8

因此,字符“您”的UCS2 編碼為:60A8(十六進制數字)。
(二)發送PDU 串的編制分析
通過UCS2 編碼我們得到中文Unicode 碼,接著就可以進行發送PDU 串的編制了。從表
面上看,PDU 串是ASCII 碼串,同樣由‘0’-‘9’、 ‘A’-‘F’這些數字和字母組成。它
們是8 位字節的十六進制數,或者BCD 碼十進制數。PDU 串除了包含所發送的消息本身外,
還包含很多其它參數信息,如服務中心號碼、目標號碼和編碼方式等?,F用一個實例說明發
送PDU 串的結構和編排方式。
例:08 91 683108100005F0 31 00 0D 91 683125503956F9 00 08 C2 06 60A8597DFF01
參照規范,具體分析:
分段 含義 解釋說明
08 SMSC 地址信息的長度 共8 個八位字節(包括91)
91 SMSC 地址格式(TON/NPI) 用國際格式號碼(在前面加‘+’)
68 31 08 10 00 05 F0 SMSC 地址 8613800100500,補‘F’湊成偶數個
31 基本參數(TP-MTI/VFP) 要求發送回復
00 消息基準值(TP-MR) 0
0D 目標地址數字個數 共13 個十進制數
91 目標地址格式(TON/NPI)
A1:國內格式
91:國際格式
81:未知,+86 可帶可不帶。
68 31 25 50 39 56 F9 目標地址(TP-DA) 8613520593659,補‘F’湊成偶數個
00 協議標識(TP-PID) 是普通GSM 類型,點到點方式
08
用戶信息編碼方式
(TP-DCS)
00:表示7-bit 編碼, 08:表示UCS2 編碼,
04:表示8-bit 編碼。
C2 有效期(TP-VP) 5 分鐘
06 用戶信息長度(TP-UDL) 實際長度6 個字節
60 A8 59 7D FF 01 用戶信息(TP-UD) “您好!”
表一 發送PDU 串的編制分析
這里需要注意的幾點:
①.比較SMSC 地址分段:68 31 08 10 00 05 F0 與真實SMSC 地址8613800100500F(為
了湊足14 位,在末尾補F),不難發現只需將前者奇偶位對調即可得到后者。同樣,目標地
址分段68 31 25 50 39 56 F9 與實際目標地址13520593659F 之間的關系也是如此。
②.若“SMSC 地址信息的長度”分段的值為00,則意味著SMSC 地址字符串的長度為零,
PDU 串的“SMSC 地址格式”段和“SMSC 地址”段將省去。且將使用SIM 卡設置的SMSC 地址。
上例中的PDU 串變為:
00 31 00 0D 91 683125503956F9 00 08 C2 06 60A8597DFF01
③. 對于用戶信息長度,可通過VB 中的Len 函數求得,如“您好!”,用Len(“您好!”)
得到是3,那么3*2=6 即為用戶信息長度06(這里要轉換為16 進制,并且是兩位)。
④.用戶信息(TP-UD)段最大容量是140 字節,所以在UCS2 編碼方式下,可發送短消息
的最大字符數是70 個。
(三)UCS2 解碼
接收短消息時,需要將收到的用UCS2 編碼(用戶信息編碼方式為08)的消息串解碼成
字符串字符。與編碼時的Ascw()相對應,VB 中的Chrw()函數用來將Unicode 值轉化為字符
串字符。只要對Unicode 碼求Unicode 值,調用Chrw()便可轉換成字符串字符。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97