正文

在PC上通过手机发送短消息2006-02-17 21:22:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/iamben250/10209.html

分享到:

可见这两个函数可以实现中文和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(“如果收到短信,请回复.”)*2
mscomm1.output = "at+cmgf=0" + vbcr ‘以pdu模式发送短信
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的位数.length*2为5982679c6536523077ed4fe1002c8bf756de590d002e的位数.


到这里,短信的发送基本完成,短信的接收更简单一点,主要是解码,就是应用chrw()函数了.写完这篇文章,才算送了一口气,算是对大家有个交待吧,感谢大家的关注.如果需要源代码,可以给我发邮件 :tmjpd@21cn.com.

阅读(2464) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册