当前位置: 首页 > news >正文

重庆市网站建设_网站建设公司_动画效果_seo优化

石家庄信息门户网站定制,做水果的有什么网站好,免费模板的软件,wordpress中文名字注册本文示例源代码或素材下载 简介 没发过短信的年轻人肯定是属于那种受保护的稀有动物#xff0c;通讯发达的今天短信已经成为人们交流的重要手段#xff0c;其中也蕴含着巨大的市场和经济利益#xff0c;掌握短信技术的人才也受到各大公司的追捧是目前职场上耀眼的明星。本文…  本文示例源代码或素材下载   简介   没发过短信的年轻人肯定是属于那种受保护的稀有动物通讯发达的今天短信已经成为人们交流的重要手段其中也蕴含着巨大的市场和经济利益掌握短信技术的人才也受到各大公司的追捧是目前职场上耀眼的明星。本文介绍了短信的原理和实现方法重点说明了短信的编码方式、AT指令以及用C#实现串口通讯的方法。   前言   目前主有三种发送短信的方式   1、 网关方式就是向当地的电信部门申请不需要额外的设备适用于大型的通信公司像华为、傲天、中兴、亚信等。   2、 终端方式就是借助像GSM MODEM之类的设置支持AT指令的手机也行通过数据线连接电脑来发送短信用这种方法比较适用于小型及个人。要实现这种方式必须理解串口通信、AT指令、短信编码、解码这也是本文讨论的重点。   3、 利用一些网站来实现方式简单不过对网站依赖性太高对网络的要求也比较高非常不适于进行项目开发   终端短信连接示意图   原理篇   短信编码   在收发短信方面按时间产生先后共产生了三种模式Block Mode、基于AT指令的Text Mode、基于AT指令的PDU Modem, Text Mode比较简单多款诺基亚手机均支持该模式。西门子的手机大多只支持PDU模式PDU模式是发送或接收手机SMS信息的一种方法短信息正文经过十六进制编码后被传送。目前PDU已取代Block Mode因我们主要探讨PDU模式的发送。以西门子3508手机为例。   SMS是由Etsi所制定的一个规范GSM 03.40 和 GSM 03.38。当使用7-bits编码时它可以发送最多160个字符;但用8-bit编码最多可以发送140个字符通常无法直接通过手机显示;还有用16-bit编码时最多70个字符被用来显示Unicode(UCS2)文本信息可以被大多数的手机所显示。我们今天讨论的是UCS2编码,也就是说最多只能发送70个字符不管英文还是中文。   现例如我们现在要发送如下信息向我的手机13715342642发送你好Hello!。在没有发送之前你要清楚手机SIM卡所在地的短信中心号并不是你现在所在地方的短信中心号像我在深圳深圳的短信中心号是8613800755000即使我现在到外地短信中心号仍是深圳。从上面我们得到了下面的信息   接收的手机号13715342642   短信中心号8613800755000   短信内容你好Hello!   在实际使用中上面这些信息并不为手机所执行要进行编码手机才会执行先不管看看编码后的信息   0891683108705500F011000D91683117352446F2000800124F60597DFF0C00480065006C006C006F0021   看不懂吧我来解释一下   08 - 指的是短信中心号的长度也就是指(91)( 683108705500F0)的长度   91 - 指的是短信息中心号码类型。91是TON/NPI遵守International/E.164标准指在号码前需加号此外还有其它数值但91最常用。   683108705500F0 - 短信息中心号码。由于位置上略有处理实际号码应为8613800731500字母F是指长度减1。这需要根据不同的地域作相应的修改。前面的(08)(91)( 683108705500F0)实际上就构成了整个短信的一部份通称短消息中心地址Address of the SMSC。   11 - 文件头字节   00 - 信息类型TP-Message-Reference   0D - 被叫号码长度   91 - 被叫号码类型   其实在实际处理中我们通常把11000D91写死在程序中因为在国内这些数据都是不会改变的。   683117352446F2 -被叫号码经过了位移处理实际号码为8613715342642。上面的000D91( 683117352446F2),构成了整个短信的第二部份目的地址TP-Destination-Address。   00 - 协议标识TP-PID,这里一般为00   08 - 数据编码方案TP-DCSTP-Data-Coding-Scheme,采用前面说的USC2(16bit)数据编码   00 - 有效期TP-VPTP-Valid-Period   12-长度TP-UDLTP-User-Data-Length也就是4F60597DFF0C00480065006C006C的长度 36 / 2 18 的十六进 12   4F60597DFF0C00480065006C006C 006F0021- 这里就是短信内容了实际内容为:你好Hello!程序实现请参考本文章所带源程序的PDUdecoding.cs。   AT指令   说到AT指令可多了有厚厚的一本书不属于我们今天讨论的范围在这里我仅讨论在发送短信中必须要用的几个AT指令。   与SMS有关的GSM AT指令from GSM07.05如表1所示    AT 指令功 能 ATCMGCSend an SMS command发出一条短消息命令ATCMGDDelete SMS message删除SIM卡内存的短消息 ATCMGFSelect SMS message formate选择短消息信息格式0-PDU;1-文本ATCMGLList SMS message from preferred store列出SIM卡中的短消息PDU/text: 0/REC UNREAD-未读1/REC READ-已读2/STO UNSENT-待发3/STO SENT-已发4/ALL-全部的ATCMGRRead SMS message读短消息ATCMGSSend SMS message发送短消息 ATCMGWWrite SMS message to memory向SIM内存中写入待发的短消息ATCMSSSend SMS message from storage从SIN|M内存中发送短消息 ATCNMINew SMS message indications显示新收到的短消息ATCPMSPreferred SMS message storage选择短消息内存ATCSCA SMS service center address短消息中心地址ATCSCBSelect cell broadcast messages选择蜂窝广播消息 ATCSMPSet SMS text mode parameters设置短消息文本模式参数 ATCSMSSelect Message Service选择短消息服务 表一相关的GSM AT指令   我现在以实例来说明这些指令的使用方法   先用手机数据线将手机连接到电脑串口并将串口的波特率设置为19200,可以开始了。   1、首先测试你的连接及手机是否支持AT指令请在你的串口调试程序中输入   AT回车   屏幕上返回OK表明计算机与手机连接正常那样我们就可以进行其它的AT指令测试了   2、设置短信发送格式   ATCMGF1回车   屏幕上返回OK表明现在短信的发送方式为PDU方式如果是设置为TEXT方式则ATCMGF0回车   3、 发送短信   发送内容及手要号仍旧同上面在编码中的一样编码后得到要发送的数据如下   0891683108705505F011000D91683117352446F2000800124F60597D002C00480065006C006C006F0021   我们用如下指令来发送   ATCMGS33回车   如果返回,就把上面编码数据输入并以CTRLZ结尾稍等一下你就可以看到返回OK啦。   说明一下为什么ATCMGS33呢是这样得来的   11000D91683117352446F2000800124F60597D002C00480065006C006C006F0021   这一段字符串的长度除以2得到的结果上面的字符串短信中心号加上短信内容得到的怎么得到的请回顾一下解码部份   在我们前面的讨论中一条完整的短信发送只要执行三条AT指令AT、ATCMGS、ATCMGS就可以了。由于篇幅我只能在这里提到这么多大家要是想了解更多可以向各手机厂商索取AT指令白皮书里面很详细的。   上面讲到的只能为我们实际中作准备我们还必须要一个发送途径根据我们的需要我们选择投资最少实现比较方便的串口通信。注意串口通过数据线跟手机相连用AT指令来实现发送短信在我们选择数据线时建议购买原厂所配非原厂所配在使用过程中经常出现一些莫明其妙的问题比如手机屏幕黑了手机老是提示电池电量不足之类的。   串口通信   在C#中要实现串口通信很多人都不知所措在论坛上经常可以看到怎么用MSCOMM实现串口通信、怎样能过串口与设备相连诸如此类的问题。其实国外的网友早就把这些列入FAQ中了。   通常在C#中实现串口通信我们有四种方法   第一通过MSCOMM控件这是最简单的最方便的方法。可功能上很难做到控制自如同时这个控件并不是系统本身所带所以还得注册不在本文讨论范围。可以访问http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id320 一个国外网友的写的教程作者很热心我曾有发邮件给他很快就回复了。   第二微软在.NET新推出了一个串口控件基于.NET的P/Invoke调用方法实现详细的大家可以访问微软网站http://msdn.microsoft.com/msdnmag/issues/02/10/NETSerialComm/default.aspx方便得到更多资料。   第三就是用第三方控件啦可一般都要付费的不太合实际不作考虑   第四自己用API写串口通信这样难度高点但对于我们来说可以方便实现自己想要的各种功能   在本文我们采用第四种方法来实现串口通信不过不是自己写用一个国外网友现成的已经封装好的类库不过功能简单点相对我们来说已经够用了。   在整个终端短信的操作过程中与串口的通信只用到了四个功能打开、写、读、关闭串口。下面是类库对这四个功能的定义   打开串口   函数原型public void Open()   说明打开事先设置好的端口   示例   using JustinIO;static JustinIO.CommPort ss_port new JustinIO.CommPort();ss_port.PortNum COM1; //端口号ss_port.BaudRate 19200; //串口通信波特率ss_port.ByteSize 8; //数据位ss_port.Parity 0; //奇偶校验ss_port.StopBits 1;//停止位ss_port.ReadTimeout 1000; //读超时try{ if (ss_port.Opened) {  ss_port.Close();  ss_port.Open(); //打开串口 } else {  ss_port.Open();//打开串口 } return true;}catch(Exception e){ MessageBox.Show(错误 e.Message); return false;}   写串口   函数原型public void Write(byte[] WriteBytes)   WriteBytes 就是你的写入的字节注意字符串要转换成字节数组才能进行通信   示例   ss_port.Write(Encoding.ASCII.GetBytes(ATCGMI/r)); //获取手机品牌   读串口   函数原型public byte[] Read(int NumBytes)   NumBytes 读入缓存数注意读取来的是字节数组要实际应用中要进行字符转换   示例   string response Encoding.ASCII.GetString(ss_port.Read(128)); //读取128个字节缓存   关闭串口   函数原型ss_port.Close()   示例   ss_port.Close();   由于篇幅以及串口通信涉及内容广泛我在这里只讲这些。   在上面我们已经把终端短信所需的各种原始技术有所了解是可以小试牛刀的时候了。   实践篇   在整个开始的时候你要准备以下软硬件   硬件西门子3508或C35系列手机一个   西门子手机通信数据线一条   软件VS.NETC#   短信编码类库PDUdecoding.cs   串口通信类库JustinIO.cs   当所要求的软硬件都准备好后我们就可以正式开始了。下面以我自己的测试用例为大家详细介绍。   做什么事情都应该有计划虽然我们的测试用例很简单但还是画个简单的流程图   有了流程图还只是明白了程序怎么运行再看看界面会让你更心动的了。   图二、短信终端C#版界面图   再不开始就有人骂我了。下在我讲的开发环境是在VS.NET(C#)中。COME GO,GO…   步骤一、打开VS.NET新建项目-Visual C#项目-Windows应用程序名称中输入你的工程名就行啦我的是smsForCsharp   步骤二、参照上面的界面图设计你的程序界面,下面是我程序中各控件的主要属性    控件名称控件Name属性说明TextBoxtargetNumber接收手机号码TextBoxCenterNumber短信中心号TextBoxsmsState发送短信后返回的信息。注意设置控件为多行TextBox smsContent短信内容同样注意设置为多行ComboBoxConnectPort连接手机的端口例COM1/COM2ComboBoxConnectBaudRate串口连接的波特率在串口通信中很重要的ButtonbtnSend发送按钮ButtonbtnConnect连接按钮主要用于程序的初始化ButtonbtnExit退出按钮  步骤三、将PDUdecoding.cs与JustinIO.cs拷入刚刚新建工程目录并打开解决方案资源管理器右键添加现有项选中两个文件就行了这里再打开类视图里面是不是多了两个类JustinIO与SMS类啊如图三要是没有那你再试。   图三添加类后的类视图   步骤四、引用命名空间用代码查看方式打开Form1.cs(这里以我电脑为准如果你自己更改过请以你电脑为准)在代码前面加上   using JustinIO;using SMS;using System.IO;using System.Text;   步骤五、在smsFormCsharp类中添加两个字段ss_port、sms分别为JustinIO及SMS的对象,如下   步骤六、添加串口初始化代码,如下:   /// summary/// 初始化串口/// /summarypublic bool InitCom(string m_port, int m_baudrate){ ss_port.PortNum m_port;//串口号 ss_port.BaudRate m_baudrate;//波特率 ss_port.ByteSize 8;//数据位 ss_port.Parity 0;// ss_port.StopBits 1;//停止位 ss_port.ReadTimeout 1000;//读超时 try {  if (ss_port.Opened)  {   ss_port.Close();   ss_port.Open();  }  else  {   ss_port.Open();//打开串口  }  return true; } catch(Exception e) {  MessageBox.Show(错误 e.Message);  return false; }}   将上述代码直接拷入你的程序中并确保添加在Main主函数的后面按F5,调试应该没什么问题不过上面还没有实际任何看得见的功能仅仅是打开了串口而以。   步骤七、打开串口后我们就应该初始化程序取得手机的名牌型号以及短信中心号双击连接按钮并把下面代码拷入程序中   /// summary/// 初始化代码并获取手机相关信息/// /summary/// param namesender/param/// param namee/paramprivate void btnConnect_Click(object sender, System.EventArgs e){ bool opened InitCom(ConnectPort.SelectedItem.ToString(),Convert.ToInt32(ConnectBaudRate.SelectedItem.ToString()));//打开并初始化串口 bool Connected false; if (opened) {  ss_port.Write(Encoding.ASCII.GetBytes(ATCGMI/r)); //获取手机品牌  string response Encoding.ASCII.GetString(ss_port.Read(128));  if (response.Length 0)  {   ConnectState.Text response.Substring(10,7);   Connected true;  }  else  {   ConnectState.Text 与手机连接不成功;   Connected false;  }  ss_port.Write(Encoding.ASCII.GetBytes(ATCGMM/r));//获取手机型号  response Encoding.ASCII.GetString(ss_port.Read(128));  if(response.Length 0)  {   ConnectState.Text ConnectState.Text response.Substring(10,5) 连接中......;   Connected true;  }  else  {   ConnectState.Text 与手机连接不成功;   Connected false;  }  ss_port.Write(Encoding.ASCII.GetBytes(ATCSCA?/r));//获取手机短信中心号  response Encoding.ASCII.GetString(ss_port.Read(128));  if(response.Length 0)  {   CenterNumber.Text response.Substring(20,13);   Connected true;  }  else  {   Connected false;  }  if (Connected true)  {   btnConnect.Enabled false;   btnSend.Enabled true;  }  else  {   btnConnect.Enabled true;   btnSend.Enabled false;  } }}   到这里你可以按F5,编译调试通过在确保你的手机与电脑连接正常下点击连接按钮看看是不是像我的一样,手机型号及短信中心号者正常显示出来了。   图四、连接后程序界面   步骤八、看到上在的结果是不是感觉到离成功发送短信很近啦看这么长的文章费了大家不少时间再不亮出发短信部份对不起大家了。   双击发送按钮将下面代码拷入程序中。   /// summary/// 发送短信/// /summary/// param namesender/param/// param namee/paramprivate void btnSend_Click(object sender, System.EventArgs e){ string decodedSMS sms.smsDecodedsms(CenterNumber.Text,targetNumber.Text,smsContent.Text); byte[] buf Encoding.ASCII.GetBytes(String.Format(ATCMGS{0}/r,sms.nLength)); ss_port.Write(buf); string response Encoding.ASCII.GetString(ss_port.Read(128)); string SendState ; if( response.Length 0 response.EndsWith( )) {  ss_port.Write(Encoding.ASCII.GetBytes(String.Format({0}/x01a,decodedSMS)));  SendState 发送成功!; } else {  SendState 发送失败; } string Result String.Format({0},{1},{2}/n/r,targetNumber.Text,smsContent.Text,SendState); smsState.Text Result;}   快按F5吧!神啊快通过吧不用求神了已经通过了现在你就可以发短信了请确保手机可以正常连接电脑。按连接然后填入你要的发送的目标手机号并在内容中添入你要发送的内容发送吧成功了成功了是这样子的看你的跟我的一样吗   图五、发送成功   还有一些事 不要忘了记得添加退出代码。双击退出添加下面代码:   /// summary/// 关闭串口退出程序/// /summary/// param namesender/param/// param namee/paramprivate void btnExit_Click(object sender, System.EventArgs e){ ss_port.Close(); Application.Exit();}   到这里都告一个段落了所有的功能都完成了不过由于这仅仅是一个演示用例还有很多没有考虑像串口通信中的在实际操作不可这样操作的应该用多线程来处理一个专门用来读串口一个专门用来写串口。还有程序中很多防出错代码没有添加进去希望有心有朋友添加并公布出来这也是我写这篇文章希望看到的结果。请勿将本程序直接用于实际中真诚提醒你   终于写完了我也放松了许多本来很早就应该完成了因为一些个人原因没有及时写完向那些曾经问过我相关问题没有及时回复的朋友抱歉一声希望你们继续支持我   调试环境   Windows 2000 Professional、Visual Studio.NET、西门子3508手机、西门子专用数据线。   常见问题   第一 手机品牌因为不同产商的手机对AT指令的支持不同所以请选择适合你手机AT指令像NOKIA的就只能用TEXT模式的AT指令。   第二 数据线问题出得最多的地方也就是数据如果接上数据线后你的手机显示为黑屏建议你换数据线。   第三 手机SIM卡上的短信中心号设置请确保在你的手机上可以发送短信。   第四 请你先用串口调试工具调试手机与电脑的连接这样对你整个工作都是一个保证。   作者申明   1、本文示例程序可以任意拷贝、传播但请保留作者的版权申明以及第三方类库作者的版权申明。   3、本文为版权归本文所有未作者及天极网的同意不得转载转载于:https://www.cnblogs.com/xyzlmn/archive/2009/10/21/3168360.html
http://www.ihoyoo.com/news/50233.html

相关文章:

  • 贵州省住房与城乡建设厅门户网站Wordpress可以访问么
  • 代做机械设计的网站办公室设计装修
  • 外贸展示网站多少钱网页课程设计
  • 有没有做logo的网站九江市住房和城乡建设局网站
  • 网站诚信备案微信公众平台如何绑定网站
  • 泰安医院网站建设php网站制作商品结算怎么做
  • 网站优化大赛php发布wordpress接口
  • 互联网做网站地推下载可以做动漫的我的世界视频网站
  • 拍摄视频制作的广告公司seo网站制作
  • 新余做网站的公司陕西省建设监理协会查询官方网站
  • ppt网站链接怎么做河北网络公司排名
  • 注册域名怎么建设网站河北网站备案注销
  • 苏州妙笔网络科技有限公司网站栏目结构优化
  • 品牌网站建设推荐大蝌蚪咸阳做网站电话
  • 前端开发人员怎么做网站新乡市延津县建设局网站
  • 怎么做淘宝网站的网页wordpress ios
  • 我的手机网站广告商网站建设
  • 整站策划营销型网站建设网站优化无锡做网站费用
  • 360搜索的网站收录入口淘宝网页美工设计
  • 辽宁省建设厅安全员考试官方网站个人网站的基本风格是
  • 油气集输毕业设计代做网站seo网站基础建设
  • 在线购物网站开发泰安网站设计
  • 临夏州住房和城乡建设厅网站什么叫界面设计
  • 做网站播放未上映的电影人人建站
  • 商标设计网站有哪些如何增加网站的流量
  • 合肥网站建站工作室世界互联网峰会
  • 建设部网站从何时可以查询工程师证淮安网站网页设计
  • 密云建站推广需求登记网站怎么做
  • 国内wordpress主题网站广东住房和城乡建设厅官网
  • 做公司网站教程视频网站建设中英文版