• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    利用VB 實現短消息收發

    發布: 2007-5-25 09:18 | 作者: iamben250 | 來源: programfan.com | 查看: 96次 | 進入軟件測試論壇討論

    領測軟件測試網

    利用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.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>