代码:--------------------------------------------------------------------------------
目前手机短信息的应用越来越广泛,互联网上提供短信息发送的站点也越来越多,但一些站点的服务并不尽如人意,往往发出去的短信息石沉大海。最可靠的发送方法当然是用手中的手机了,如果设置了状态报告,更能确切知道对方是否收到了此条信息。手机发送尽管比较可靠, 但也存在输入麻烦、效率低的问题。本文介绍一种方法,只要手机能够与电脑相连(通过红外端口或用手机数据线连接串行口,同时手机支持GSM AT指令集),就可以通过自行编制的短信息发送软件,实现短信息的发送。
现在市场上的大多数手机均支持类似于Modem控制的GSM AT指令集,该指令集是由诺基亚、爱立信、摩托罗拉和HP等厂家共同为GSM系统研制的,其中包含了对SMS(Short Message Service)的控制。
GSM AT相关指令的介绍
与SMS有关的GSM AT指令如表1所示:
表1 相关的GSM AT指令
对SMS的控制共有三种实现途径:
Block Mode;
基于AT命令的Text Mode;
基于AT命令的PDU Mode。
Text Mode比较简单,多款诺基亚手机均支持该模式。西门子的手机大多只支持PDU模式,PDU模式是发送或接收手机SMS信息的一种方法,短信息正文经过十六进制编码后被传送。目前,PDU已取代Block Mode,因此本文主要探讨PDU模式的发送。
计算机和手机的通信
本文以西门子 S3568i为例,介绍如何实现短信息的发送。
数据线连接
首先,通过S35/25数据线将手机与电脑串行口相连。然后,打开超级终端,选择直接串行口连接,端口参数设为19200速率、无校验、数据位8、停止位1。
红外线连接
如果使用带红外端口的计算机,可以设置与手机的无线连接。首先确认计算机红外端口已打开,并将手机的红外线和收传真/数据功能打开,对接红外端口,计算机系统托盘上应当出现一个红外设备西门子S35(如果没有安装红外监视器,则不显示)。然后,打开超级终端,选择IrDa上的串行口。
连接测试
点击超级终端工具条上的呼叫按钮,输入AT并回车,屏幕上如果出现OK则表明计算机与手机的连接成功,这时就可以输入各类GSM AT指令了。
如:查询手机厂家,输入AT+CGMI=
通常情况下,执行测试命令AT+CMGS=?
If PDU mode (+CMGF=0)+CMGS=
如果短信息格式指令AT+CMGF返回的是0,则SMS格式为PDU模式,再执行AT+CMGS=命令后,手机返回“>”符号并等待输入,输入PDU数据并以^Z或Esc键结束。
如果信息发送成功,则返回OK,并显示信息号:
+CMGS:
如果发送失败,则返回如下信息:
+CMS ERROR:
PDU数据格式的分析
下面通过对存储在手机中的待发信息的分析,来介绍SMS PDU的数据格式。首先,用手机写一条短信息,发送手机号码为13605696031,信息内容为“Hello World!”。通过执行AT+CMGL=2可以读出此条信息。
操作过程如下(斜体字符为响应信息,{}内为注释):
AT
OK
AT+CMGL=2 {读未发短信息}
+CMGL: 1,2,,24 {1表示信息个数,2表示未发信息,24表示信息总容量}
08 91 683108501505F0 11 00 0B 81 3106656930F1 0000A7 0B E8329BFD06DDDF723619
OK
下面分析这条信息:
08:短信息中心地址长度。
91:短信息中心号码类型,91是TON/NPI。TON/NPI遵守International/E.164标准,指在号码前需加‘+’号;此外还可有其他数值,但91最常用。
683108501505F0:短信息号码,是所使用的服务中心地址。由于位置上略有处理,实际号码应为:8613805515500(字母F意指长度减1),这是作者所在地GSM短信息中心的号码。
11:文件头字节(header byte,是一种bitmask)。这里11指正常地发送短信息。
00:信息类型。
0B:被叫号码长度。
81:被叫号码类型。
3106656930F1:被叫号码,也经过了移位处理,实际号码为13605696031。
0000A7:短信息编码类型GSM Default Alphabet,如为中文则是000010。
0B:短信息长度。
E8329BFD06DDDF723619:短信息内容“Hello World!”。
短信息的编码方法及编程实现
下面我们介绍纯英文和纯中文的信息编码方法。通过测试我们发现,每条发送的短信息前面部分均相同,只是被叫号码和短信息内容有变化。
1.英文编码
参见表2,设短信息内容为“Hello World!”。缺省的GSM 字符集为7位编码,可以简单地理解为ASCII码(ASCII值小于80Hex,因此,Bit8被忽略),依次将下一7位编码的后几位逐次移至前面,形成新的8位编码,参见表2箭头指示。需要注意的是第9行,移位计数已达7位,则直接将本编码前加0。GSM并非支持所有的ASCII字符显示。
表2 英文编码的实现过程
下面是实现英文编码的部分Delphi 5代码:
//英文格式编码,s为String
function Encode1(var s:String):String;
var
i,j,len:Integer;
cur:Integer;
t:String;
begin
Result:=‘’;
len:=Length(s);
//j 用于移位计数
i:=1;j:=0;
while ibegin
if i
cur:=(ord(s[i]) shr j) or ((ord(s[i+1]) shl (7-j)) and $ff)
else
cur:=(ord(s[i]) shr j) and $7f;
FmtStr(t,‘%2.2X’,[cur]);
Result:=Result+t;
inc(i);
//移位计数达到7位的特别处理
j:=(j+1) mod 7;if j=0 then inc(i);
end;
end;
2.中文编码
参见表3,设短信息内容为“中文短信息”。中文短信息的实现较简单,只需将??????的中文编码转换为代码页为CP936的Unicode编码即可。
表3 中文编码的实现过程
通过Delphi的WideString类型转换,可以巧妙地实现??????到Unicode的编码转换(注意代码页和操作系统相关联)。下面是实现中文编码的部分Delphi 5代码:
// 中文格式编码,s为Unicode String
function Encode2(var s:WideString):String;
var
i,len:Integer;
cur:Integer;
t:String;
begin
Result:=‘’;
len:=Length(s);
i:=1;
while ibegin
cur:=ord(s[i]);
//BCD转换
FmtStr(t,‘%4.4X’,[cur]);
Result:=Result+t;
inc(i);
end;
end;
小 结
以上介绍了PDU格式的短信息编码。建议英文信息长度不超过140个字符,中文信息不要超过54个汉字。如果使用能够支持文本方式的手机进行发送,实现起来更简单。如发送“Hello World!”,用如下的AT指令即可:
AT+CGMF=1
>Hello World!

本站1月9日消息,天猫精灵日前发布云云接入服务升级的公告,升级后的云云接入服务从1月1日起从免费模式变更为付费。本站附新增功能和优化:优化云端协议,提升设备连接的稳定性;优化重点品类的语音控制;账号授权升级:新增天猫精灵中开发者三方App的展示功能,帮助用户更快更方便进行账号绑定,同时新增开发者三方App账号授权支持一键绑定天猫精灵账号;新增终端屏显交互能力,除语音交互外,用户可通过app、带屏音箱控制设备、获取设备状态;新增智能场景联动能力,新建产品的属性、事件,可作为状态或事件上报,定义天猫

两年多前,Adobe 发布了一则引人关注的公告 —— 将在 2020 年 12 月 31 日终止支持 Flash,宣告了一个时代的结束。一晃两年过去了,Adobe 早已从官方网站中删除了 Flash Player 早期版本的所有存档,并阻止基于 Flash 的内容运行。微软也已经终止对 Adobe Flash Player 的支持,并禁止其在任何 Microsoft 浏览器上运行。Adobe Flash Player 组件于 2021 年 7 月通过 Windows 更新永久删除。当 Flash

PHP是一种开源的服务器端编程语言,是Web应用程序开发中最流行的语言之一。随着技术的不断发展,PHP也在不断更新和改进。最新的PHP版本是8.3,这个版本带来了一些重要的更新和改进,本文将介绍一些开发者必知的重要更新。类型和属性改进PHP8.3引入了一些对类型和属性的改进,其中最受欢迎的是在类型声明中引入了新的union类型。Union类型允许函数的参数

解放开发者的选择困难症:五个让你眼花缭乱的kafka可视化工具引言:Kafka是一种高性能、分布式的流数据平台,被广泛应用于构建实时数据管道和流处理应用。作为开发者,处理Kafka中的消息队列是一项关键任务。然而,直接通过命令行或API来操作Kafka可能会令开发者感到繁琐,因此,为了方便开发者管理和监控Kafka,出现了各种可视化工具。本文将介绍五个引人注

Webman:一个开发者的完美伙伴随着互联网的发展,Web开发已经成为了一个非常重要的领域。在这个领域,开发者需要掌握多种技术和工具来构建高效、可靠的Web应用程序。而作为一个开发者的完美伙伴,Webman提供了许多有用的功能和工具,极大地简化了开发过程,并提高了效率。Webman是一个基于Python语言的Web开发框架,它结合了许多常用的工具和库,给开发

Golang:AI开发者的首选摘要:人工智能(ArtificialIntelligence,AI)正逐渐成为我们日常生活中不可或缺的一部分。AI技术的快速发展使得越来越多的开发者开始探索如何利用AI来解决各种问题。而在AI开发中,选择合适的编程语言尤为重要。在众多编程语言中,Golang(又称Go)因其独特的优势而成为越来越多AI开发者的

Canvas的独特之处:为何成为开发者的首选?随着技术的不断发展,开发者们在构建丰富、交互性强的Web应用程序时,面临了越来越多的选择。其中,HTML5的Canvas元素因其强大的绘图功能,成为众多开发者的首选工具。Canvas是HTML5中新增的一个元素,它提供了一种面向像素的绘图环境。与传统的基于DOM的方法相比,Canvas使用JavaScript绘制

Go语言的跨平台能力为开发者带来了哪些好处和机会随着各种操作系统和平台的出现,开发者在选择编程语言时需要考虑跨平台能力。而Go语言作为一门现代化的编程语言,以其出色的跨平台能力而备受开发者的青睐。本文将探讨Go语言的跨平台能力带来的好处和机会。跨平台开发的好处Go语言的跨平台能力意味着开发者可以采用一套代码同时运行在不同的操作系统和平台上,大大降低了开发和维


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

Atom编辑器mac版下载
最流行的的开源编辑器