VB实现在PC上通过手机发短消息

VB实现在PC上通过手机发短消息
作者:不详  来源于:中国VB网  发布时间:2006-12-30

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

  手机的短消息实现目前有三种方法:

  1.通过移动网关发送短消息,使用该方法不需要附加的硬件,但是需要到电信部门申请网关,比较适用于一些大型的网络通讯公司开发,目前华为,中兴等公司就做的这方面的工作,并且还有相应的开发包供开发人员使用。

  2.在电脑上通过GSM MODEM向手机发送中文短消息,这是目前比较适合于小项目开发的一种方法,所需硬件包括一款手机,提供GSM MODEM,以及相应的数据线或是红外线适配器.该方法编码简单,只需对AT指令和串口编程比较熟悉就可以实现,而且对硬件需求不高,并能自动收发短消息.

  3.通过一些网站上提供的短信发送功能来实现,比如新浪网,网易都提供这方面的服务,这种方法是这三种方法中实现起来最简单,所需资源最少的,但是对于网站的依赖性太强,对网络的依赖同样无法避免,不适用于项目开发。

  通过第二种方法收发短消息又分为三种模式:Block模式、Text模式和Pdu。使用Block机生产厂家提供驱动支持,现在还没有发现哪个厂家公布支持这种短信发送模式,而Pdu模式开发起来比较复杂,并且需要编写专门的函数来将文本转换为Pdu格式,比较繁琐.相对而言,应用Text模式开发及方便也简单,是一种不错的选择,不过使用Text模式开发只能发送ASCII码,对于中文的Unicode码不能发送.

  使用Text模式发送短信其实很简单,只要对于AT指令有基本的了解,就能编写出短消息的发送程序,可是一直以来介绍该方法的文章却少之又少,很多人认为使用该方法太简单,不值一提。不过对于简单的应用来说,该方法也不失于一种不错的选择。

  先在项目中添加Mscomm控件,一般的部件栏中可能没有列出Mscomm控件,可以过右击部件栏,选择”部件”,或是通过在菜单中的”工程”选择”部件”,然后选中Microsoft Comm Control 6.0即可.添加了Mscomm控件后,可以设置一些基本的参数.如果你使用Nokia的手机,你还必须安装data suite(可以到Nokia的开发论坛上去下载一个),然后Mscomm的commport选择3;如果你使用其他手机,采用红外线接口,你必须安装红外线驱动程序。选择相应的端口.下面的代码是一些基本参数的设置:

Mscomm1.Settings=”9600,N,8,1” ‘9600波特,无奇偶校验,8位数据,一个停止位
Mscomm1.InputLen=0 ‘读入整个缓冲区
Mscomm1.Portopen=True ‘打开端口

  发送短消息的代码如下:

MSComm1.Output = "AT+CMGF=1" + vbCr ‘设置发送的模式,注意:一定要加上 vbCr
MSComm1.Output = "AT+CSCA=" & Chr$(34) & "8613010341500" & Chr$(34) & ",129" + vbCr ‘8613010341500是短消息中心,各地的号码不一样,必须设置当地的短消息号码
MSComm1.Output = "AT+CMGS=" & Chr$(34) & "13057575064" & Chr$(34) & ",129" + vbCr ‘13057575064是对方手机号
MSComm1.Output = "test" & Chr$(26) ‘chr$(26)是Ctr+ Z

  以上是简单实现短消息,你可以根据AT指令集结合VB的串口控件开发出更加完善的程序和功能丰富的应用程序,如接收短消息,拨号等等.


  使用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()函数了.写完这篇文章,才算松了一口气,算是对大家有个交待吧,感谢大家的关注。

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值