WAP之家:为您提供最全最新的WAP技术,CP.SP.3G等行业资讯。 WAP之家交流论坛全新开放 点击进入>>
WAP资讯 | 3G动态 | SP动态 | 运营商动态 | 内容商动态 | 制造商动态 | 论坛讨论>> 每次自动访问
WAP技术 | WAP源码 | 手机编程 | 手机源码 | 无线技术 | J2ME技术 | 手机软件 添加到收藏夹
IVR技术 | SP资料 | SMS MMS技术 | 商业方案 | IVR下载 | 书籍教程 | 工具软件 语言:繁體中文

WAP之家技术文章SMS MMSSMS技术在PC上通过手机发送短消息

在PC上通过手机发送短消息
作者:lotusswan  来源:本站整理  发布时间:2005-7-13 10:45:52
很早以前,就注意到一些手机短消息的发送软件,当时觉得那是多么的神奇,可是从来没有想过去开发一个自己的手机短消息软件.临近毕业,要做毕业论文,我选的毕业课题是机房安全系统的开发,主要是机房环境系数的监测以及报警功能的实现,其中就包括手机短消息报警和拨号报警.

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

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的串口控件开发出更加完善的程序和功能丰富的应用程序,如接收短消息,拨号等等.
写完<<在pc上通过手机发送短消息>>后,就打算接着写中文短信息的发送的,可是毕业论文时间实在太紧,一直耽搁下来了,这几天陆续有几个网友给我发邮件,关注这个话题的网友也比较多,而且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串(我调试程序时采用): 0891683110301405f011000d91683159717456f4000800165982679c6536523077ed4fe1

002c8bf756de590d002e.我们将其分解为:


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(“

[1] [2]  下一页

[] [返回上一页] [打 印]
文章评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码