分享
 
 
 

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

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

写完<<在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(“假如收到短信,请回复.”)*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.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有