PHP网站制作之转一个手机开辟的帖子(来自开辟者俱乐...
兴趣可能会慢慢消亡,所以适当培养兴趣会激发自己无线的乐趣,有了乐趣,编程有啥难的。 代码:--------------------------------------------------------------------------------今朝手机短信息的使用愈来愈普遍,互联网上供应短信息发送的站点也愈来愈多,但一些站点的办事其实不尽善尽美,常常收回去的短信息杳无音信。最牢靠的发送办法固然是用手中的手机了,假如设置了形态呈报,更能切实晓得对方是不是收到了此条信息。手机发送虽然对照牢靠, 但也存在输出费事、效力低的成绩。本文引见一种办法,只需手性能够与电脑相连(经由过程红外端口或用手机数据线毗连串行口,同时手机撑持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=<CR>,屏幕显示Siemens。
凡是情形下,履行测试号令AT+CMGS=?<CR>,假如前往OK,标明手机撑持此指令。该指令的完全语法格局以下:
If PDU mode (+CMGF=0)+CMGS=<length><CR>PDU is given <ctrl-Z/ESC>
假如短信息格局指令AT+CMGF前往的是0,则SMS格局为PDU形式,再履行AT+CMGS=<数据长度>号令后,手机前往“>”符号并守候输出,输出PDU数据并以^Z或Esc键停止。
假如信息发送胜利,则前往OK,并显示信息号:
+CMGS: <mr>
假如发送掉败,则前往以下信息:
+CMS ERROR: <err>
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 i<=len do
begin
if i<len then
//数据变换
cur:=(ord(s) shr j) or ((ord(s) shl (7-j)) and $ff)
else
cur:=(ord(s) shr j) and $7f;
FmtStr(t,‘%2.2X’,);
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 i<=len do
begin
cur:=ord(s);
//BCD转换
FmtStr(t,‘%4.4X’,);
Result:=Result+t;
inc(i);
end;
end;
小 结
以上引见了PDU格局的短信息编码。建议英文信息长度不超越140个字符,中文信息不要超越54个汉字。假如利用可以撑持文本体例的手机停止发送,完成起来更复杂。如发送“Hello World!”,用以下的AT指令便可:
AT+CGMF=1<CR>AT+CGMS=“13605696031”,129<CR>
>Hello World!<^Z>
会有很多高手的鼓励,新手的支持,慢慢你劲头就十足,有更多的信心和兴趣去学。 作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。 小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。 环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。 php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会) 作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。 有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。 首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。 本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。 php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。 为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。 没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。 爱上php,他也会爱上你。 遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。 因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会) 这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。 真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
页:
[1]