写完<<在PC上通过手机发送短消息>>(http://www.csdn.net/Develop/article/17/17690.shtm)后,就打算接着写中文短信息的发送的,可是毕业论文时间实在太紧,一直耽搁下来了,这几天陆续有几个网友给我发邮件,关注这个话题的网友也比较多,而且CSDN邮件期刊也将我的那一篇文章收录进来了,我感到十分的欣慰,同时也觉得应该尽快完成我未完成的工作,要不然太对不起大家了.

使用Text模式收发短信代码简单,实现起来十分容易,但是最大的缺点是不能收发中文短信,实在是有点美中不足.不过Pdu模式完全可以解决这个问题,Pdu模式不仅支持中文短信,也能发送英文短信,堪称完美无缺.Pdu模式收发短信可以使用三种编码: 7-bit、8-bit和UCS2编码. 7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据消息,UCS2编码用于发送Unicode字符。我们要实现中文短信的发送,所以选择UCS2,即中文Unicode码.

首先介绍一下VB中的两个函数:ChrW()和AscW().对于Chr()和Asc()函数大家一定很熟悉,对于ChrW()和AscW()可能会比较生疏一点. ChrW 函数返回包含 Unicode 的 String,若在不支持 Unicode 的平台上,则其功能与 Chr 函数相同; AscW 函数返回 Unicode 字符代码,若平台不支持 Unicode,则与 Asc 函数功能相同。对于这两个函数我们各举一个例子说明:
       ?ascw("短")
      30701
      ?chrw(26482)
      杲

可见这两个函数可以实现中文和Unicode码之间的转换,对于我们编码解码十分方便.我们得到中文的Unicode码之后,就可以编制Pdu串了.

我们再了解一下Pdu串的构成,我们看这样一个Pdu串(我调试程序时采用): 0891683110301405F011000D91683159717456F4000800165982679C6536523077ED4FE1002C8BF756DE590D002E.我们将其分解为:

08 SMSC地址信息的长度(91683110301405F0共八位字节)
91 SMSC地址格式(TON/NPI)
683110301405F0  SMSC地址(8613010341500南京的短信服务中心号码)
11 基本参数(TP-MTI/VFP)( 发送,接收为84)
00 MR Message Reference
0D 目标SIM卡号码长度(683159717456F4按阿拉伯数字个数计)
91 同上
683159717456F4  对方手机SIM卡号(8613057575064)
00 普通GSM类型,点到点方式
08  UCS2编码
00 有效期
16  用户信息长度(5982679C6536523077ED4FE1002C8BF756DE590D002E的长度共22为字节)
5982679C6536523077ED4FE1002C8BF756DE590D002E(“如果收到短信,请回复.”Unicode码)

Pdu码的构成我们已经了解后,我们就可以开始编码了,上面的红色部分就是我们要编码实现的.

首先看SMSC地址: 683110301405F0与8613010341500F(SMSC最后一位补F构成14位),我们可以发现只需将奇偶位对调即可.同样道理: 683159717456F4与8613057575064也是一样的处理.

对于用户信息长度,我们可以通过VB里的Len函数得到,例如”你好”,我们用Len(“你好”)得到2,那么2*2=4即为用户信息长度04(这里要转换为16进制,并且是两位).对于Unicode码,我们可以通过AscW()函数一个一个汉字取出其Unicode码即可得到.

下面给出短信发送的具体实现代码(相关知识可参见前一篇文章):
        If MSComm1.PortOpen = False Then MSComm1.PortOpen = True
        Length=Len(“如果收到短信,请回复.”)*2
        MSComm1.Output = "AT+CMGF=0" + vbCr ‘以Pdu模式发送短信
        MSComm1.Output = "AT+CMGS=" & Str(15 + length ) + vbCr 
       MSComm1.Output= “0891683110301405F011000D91683159717456F4000800165982679C6536523077ED4FE1002C8BF756DE590D002E” & 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 ) + vbCr中的15为 11000D91683159717456F400080016的位数.length为5982679C6536523077ED4FE1002C8BF756DE590D002E的位数.

到这里,短信的发送基本完成,短信的接收更简单一点,主要是解码,就是应用ChrW()函数了.写完这篇文章,才算松了一口气,算是对大家有个交待吧,感谢大家的关注.

在PC上通过手机发送短消息(续篇)相关推荐

  1. 在PC上通过手机发送短消息

    很早以前,就注意到一些手机短消息的发送软件,当时觉得那是多么的神奇,可是从来没有想过去开发一个自己的手机短消息软件.临近毕业,要做毕业论文,我选的毕业课题是机房安全系统的开发,主要是机房环境系数的监测 ...

  2. 手机发送短消息(转)

    概述 手机的短消息实现目前有三种方法: 1.通过移动网关发送短消息,使用该方法不需要附加的硬件,但是需要到电信部门申请网关,比较适用于一些大型的网络通讯公司开发,目前华为,中兴等公司就做的这方面的工作 ...

  3. Python+Twilio写个exe,在电脑上向手机发送一条短信

    写个exe,在电脑上向手机发送一条短信 用python写的界面 这里需要用到Twilio,下面给出学习路径 源程序 将程序打包成exe 示范一下: 有毒!现在twilio发送中文不行,发英文就没问题了 ...

  4. 手机测试用例-短消息测试用例

    ID 功能描述 操作步骤 预期结果 test time P/F comment tester test time P/F comment tester 1 短信息 1.1创建.编辑短消息并发送 书写短 ...

  5. CEMAPI实战攻略(四)——发送短消息

    CEMAPI实战攻略(四)--发送短消息 By 吴春雷 QQ:819543772 EMail:wuchunlei@163.com 四.发送短消息 发送短信是一个相对比较简单的过程,之所以拿出来一节来讨 ...

  6. 手机的短消息实现目前有三种方法(转)

    http://blog.csdn.net/qianbo_0423/archive/2006/02/17/601029.aspx 概述 手机的短消息实现目前有三种方法: 1.通过移动网关发送短消息,使用 ...

  7. CEMAPI实战攻略(四)——发送短消息(转自http://blog.csdn.net/depraved_survival/archive/2009/03/11/3980446.aspx)

    四. 发送短消息 发送短信是一个相对比较简单的过程,之所以拿出来一节来讨论,是因为我们不仅仅要讨论如何发送短信,还要讨论一个重要的进程,也就是 tmail.exe 进程.简单的讲,这个进程在后台控制着 ...

  8. android 恢复短信 失败,解决安卓手机发送短信失败的方法

    怎么解决手机发送短信失败?虽然现在的QQ和微信它们可以给我们提供即时通讯的服务,但是也避免不了我们需要用到手机上自带的短信功能来完成通讯的这种情况.当我们使用短信功能的时候,却发现发送短信失败,这时候 ...

  9. 双卡手机发送短信 - 坑爹的双卡双待

    最近要写一个Android app,其中一个功能要发短信,直接照抄Android API Demos的例子OS\SMS Messaging,在自己的手机上测试,发现总是报错SmsManager.RES ...

最新文章

  1. [C] [二分] C语言实现快速排序
  2. 第七篇T语言实例开发,文本与程序的几种打开方法(版5.3)
  3. 美化“关于本机”中Logo、机型、CPU等信息详细教程
  4. 将科学计数法的数值转化为字符
  5. mapreduce的二次排序 SecondarySort
  6. Python进程池使用
  7. java 返回泛型_Java返回类型泛型的用法小结 | 学步园
  8. 《Adobe Premiere Pro CC经典教程(彩色版)》——第2课 设置项目 2.1 开始
  9. 线程Java的两种方式_[转载]Java线程的两种实现方式
  10. mysql alisql_对比!!mysql5.7 mysql8.0 alisql5.6同样插入400万数据的对比
  11. AltiumDesigner 的 PcbDoc文件转 pads 的 PCB文件
  12. linux下tar命令压缩/解压缩.tar/.gz/.bz2文件、分卷压缩
  13. 科技文献检索(六)——检索语言
  14. 红米note9安卓手机 通电自启动 插数据线自动开机 进系统 执行命令自动化 执行脚本
  15. 有道智云翻译API + retrofit实现在线翻译Android app
  16. 无限流量服务器可靠吗,你的无限流量真纯正吗?别再被骗了!
  17. sparkStreaming+kafka+redis小项目实战
  18. 写一个简单的MTK图片管理工具
  19. 【来日复制粘贴】状态栏随机显示
  20. 深入理解flutter的编译原理与优化

热门文章

  1. xp显示rpc服务器不可用,绿茶XP系统提示“RPC服务器不可用”如何解决
  2. 2022-2028全球与中国平板显示器用高纯溅射靶材市场现状及未来发展趋势
  3. C++里的移动语义 ~ 偷走一个对象里的资源,移入另一个对象
  4. Python-函数应用
  5. 《人工智能》之《绪论》习题解析
  6. 数据库外键references的用法
  7. iContact AE 新增功能
  8. 未来手机新前景:手机电子货币应用
  9. win10设置开机启动项_如何在bios设置中修改开机启动项
  10. C语言程序用英尺换算公式计算身高的小例子