国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 網(wǎng)絡(luò)通信 > 正文

在PC上通過(guò)手機(jī)發(fā)送短消息(續(xù)篇)

2019-11-04 22:09:00
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

        寫(xiě)完<<在PC上通過(guò)手機(jī)發(fā)送短消息>>后,就打算接著寫(xiě)中文短信息的發(fā)送的,可是畢業(yè)論文時(shí)間實(shí)在太緊,一直耽擱下來(lái)了,這幾天陸續(xù)有幾個(gè)網(wǎng)友給我發(fā)郵件,關(guān)注這個(gè)話題的網(wǎng)友也比較多,而且CSDN郵件期刊也將我的那一篇文章收錄進(jìn)來(lái)了,我感到十分的欣慰,同時(shí)也覺(jué)得應(yīng)該盡快完成我未完成的工作,要不然太對(duì)不起大家了.


       使用Text模式收發(fā)短信代碼簡(jiǎn)單,實(shí)現(xiàn)起來(lái)十分輕易,但是最大的缺點(diǎn)是不能收發(fā)中文短信,實(shí)在是有點(diǎn)美中不足.不過(guò)Pdu模式完全可以解決這個(gè)問(wèn)題,Pdu模式不僅支持中文短信,也能發(fā)送英文短信,堪稱完美無(wú)缺.Pdu模式收發(fā)短信可以使用三種編碼: 7-bit、8-bit和UCS2編碼. 7-bit編碼用于發(fā)送普通的ASCII字符,8-bit編碼通常用于發(fā)送數(shù)據(jù)消息,UCS2編碼用于發(fā)送Unicode字符。我們要實(shí)現(xiàn)中文短信的發(fā)送,所以選擇UCS2,即中文Unicode碼.


      首先介紹一下VB中的兩個(gè)函數(shù):ChrW()和AscW().對(duì)于Chr()和Asc()函數(shù)大家一定很熟悉,對(duì)于ChrW()和AscW()可能會(huì)比較生疏一點(diǎn). ChrW 函數(shù)返回包含 Unicode 的 String,若在不支持 Unicode 的平臺(tái)上,則其功能與 Chr 函數(shù)相同; AscW 函數(shù)返回 Unicode 字符代碼,若平臺(tái)不支持 Unicode,則與 Asc 函數(shù)功能相同。對(duì)于這兩個(gè)函數(shù)我們各舉一個(gè)例子說(shuō)明:
       ?ascw("短")
      30701
      ?chrw(26482)
      杲


      可見(jiàn)這兩個(gè)函數(shù)可以實(shí)現(xiàn)中文和Unicode碼之間的轉(zhuǎn)換,對(duì)于我們編碼解碼十分方便.我們得到中文的Unicode碼之后,就可以編制Pdu串了.


       我們?cè)倭私庖幌翽du串的構(gòu)成,我們看這樣一個(gè)Pdu串(我調(diào)試程序時(shí)采用): 0891683110301405F011000D91683159717456F4000800165982679C6536523077ED4FE1

002C8BF756DE590D002E.我們將其分解為:


08 SMSC地址信息的長(zhǎng)度(91683110301405F0共八位字節(jié))
91 SMSC地址格式(TON/NPI)
683110301405F0  SMSC地址(8613010341500南京的短信服務(wù)中心號(hào)碼)
11 基本參數(shù)(TP-MTI/VFP)( 發(fā)送,接收為84)
00 MR Message Reference
0D 目標(biāo)SIM卡號(hào)碼長(zhǎng)度(683159717456F4按阿拉伯?dāng)?shù)字個(gè)數(shù)計(jì))
91 同上
683159717456F4  對(duì)方手機(jī)SIM卡號(hào)(8613057575064)
00 普通GSM類(lèi)型,點(diǎn)到點(diǎn)方式
08  UCS2編碼
00 有效期
16  用戶信息長(zhǎng)度(5982679C6536523077ED4FE1002C8BF756DE590D002E的長(zhǎng)度共22為字節(jié))
5982679C6536523077ED4FE1002C8BF756DE590D002E(“假如收到短信,請(qǐng)回復(fù).”Unicode碼)
 

      Pdu碼的構(gòu)成我們已經(jīng)了解后,我們就可以開(kāi)始編碼了,上面的紅色部分就是我們要編碼實(shí)現(xiàn)的.


         首先看SMSC地址: 683110301405F0與8613010341500F(SMSC最后一位補(bǔ)F構(gòu)成14位),我們可以發(fā)現(xiàn)只需將奇偶位對(duì)調(diào)即可.同樣道理: 683159717456F4與8613057575064也是一樣的處理.


       對(duì)于用戶信息長(zhǎng)度,我們可以通過(guò)VB里的Len函數(shù)得到,例如”你好”,我們用Len(“你好”)得到2,那么2*2=4即為用戶信息長(zhǎng)度04(這里要轉(zhuǎn)換為16進(jìn)制,并且是兩位).對(duì)于Unicode碼,我們可以通過(guò)AscW()函數(shù)一個(gè)一個(gè)漢字取出其Unicode碼即可得到.


        下面給出短信發(fā)送的具體實(shí)現(xiàn)代碼(相關(guān)知識(shí)可參見(jiàn)前一篇文章):
        If MSComm1.PortOpen = False Then MSComm1.PortOpen = True
        Length=Len(“假如收到短信,請(qǐng)回復(fù).”)*2
        MSComm1.Output = "AT+CMGF=0" + vbCr ‘以Pdu模式發(fā)送短信
        MSComm1.Output = "AT+CMGS=" & Str(15 + length * 2) + vbCr
       MSComm1.Output= “0891683110301405F011000D91683159717456F4000800165982679C6536523077ED


4FE1002C8BF756DE590D002E” & Chr$(26)

       start = Timer
       pause =1
       While Timer < start + pause
         DoEvents
       Wend   
       reco = MSComm1.Input
      If InStr(reco, "OK") Then sendsms = True
      If InStr(reco, "ERROR") Then sendsms = False
       MSComm1.Output = "AT+CMGS=" & Str(15 + length * 2) + vbCr中的15為 11000D91683159717456F400080016的位數(shù).length*2為5982679C6536523077ED4FE1002C8BF756DE590D002E的位數(shù).


      到這里,短信的發(fā)送基本完成,短信的接收更簡(jiǎn)單一點(diǎn),主要是解碼,就是應(yīng)用ChrW()函數(shù)了.寫(xiě)完這篇文章,才算送了一口氣,算是對(duì)大家有個(gè)交待吧,感謝大家的關(guān)注.假如需要源代碼,可以給我發(fā)郵件 :tmjpd@21cn.com.



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 凌源市| 荃湾区| 永安市| 洪泽县| 三原县| 长海县| 灵武市| 三江| 宁都县| 贡嘎县| 瑞金市| 栾川县| 梧州市| 阜康市| 广南县| 汉川市| 安义县| 峨山| 泽库县| 镇雄县| 佳木斯市| 永安市| 四川省| 海淀区| 湘乡市| 晋州市| 孟津县| 永德县| 类乌齐县| 五莲县| 扎兰屯市| 和田市| 浮梁县| 呼伦贝尔市| 彰化市| 屯留县| 剑河县| 电白县| 凌海市| 汝州市| 兴义市|