作者:dever (如需引用,请注明出处!)
在通讯发达的今天,短信已经成为人们交流的重要手段,与E-Mail、电话等传统交流方式相比,短信有着不可比拟的优势。越来越多的企业开始选择使用短信平台来进行企业宣传、行业应用、系统集成等等。
当你决定构造一个企业的短信平台时,你面临着以下几种选择:一是通过互联网或专线接入移动运营商短信中心或短信网关;二是通过互联网或专线接入中间服务运营商的短信中心(如新浪、网易这种SP服务商);三是通过计算机连接手机发送短消息;四是通过多路短信专用设备(GSM MODEM池)发送短消息。总的来说,第一种方式具有发送速度快、成功率和可靠性高的优点。为首选,其次为第四种方式。但显然这两种方法都不是我们普通人所能接触到的,更别说DIY了,所以,今天我要介绍的方法就是第三种,利用手机内置的GSM-MODEM构建短信平台。
先介绍一下我的开发环境:
硬件:西门子M55手机一部、手机数据线(USB接口,虚拟COM口)、BENQ Joybook5000笔记本。
软件系统:Windows XP操作系统、.NET Framwork 1.1
开发工具:VS.NET2003
大部分手机都有GSM-MODEM功能,所以你只要找个能发短信,带数据线的手机就OK了,如果有红外也可以,数据线最好用原装的。稳定性是个大问题,我可提醒你了,别到时候手机坏了找我哦~~ :)
如果你是第一次接触串口编程,那么你最好再补习一些基本的知识:串口编程、常用AT指令。
OK,看完了这些东西,是不是还有点迷糊,不要紧。动手开工吧,慢慢你会明白的。
连上数据线,装好手机驱动。装完以后注意看看你的手机连在了哪个端口,一会设置要用到。
(图1:我的手机端口为COM3)
连是连上了,但我们还需要测试一下,看看能不能与电脑进行通讯,不然到时候编完了程序却发现不能通讯,怕是哭都哭不出来了。我用的测试工具是windows自带的“超级终端”。
新建一个连接,设置端口号和设置端口参数。端口参数根据你手机的参数来定,基本上选择默认参数就可以。连接成功以后出现一个类似下图的窗口:
(图2:超级终端调试窗口)
打个AT指令试试,返回OK就表示你的手机与PC已经可以通讯了。大部分时候你都需要在这里测试AT指令,可不要小看了它,还可以用它发短信哦。
事情似乎进展的很顺利,但还不到沾沾自喜的时候,因为第一个拦路虎马上就要来了。我们第一步的目标是做一个能发短消息的小程序出来。OK,鼓足勇气,开始吧!
先整理一下思路,要想发短消息,就需要向串口发消息,要发消息就要能够和串口通讯,问题似乎已经很清楚,先找个能和串口通讯的类包吧。(可惜C#中并没有直接提供这样的类,昨天看一blog上写到VB.NET2005中有专门的串口通讯类,不知道C#2005中会不会也加入这样一个类?)网上这样的组件倒是挺多的,不过大部分没有源码并且收费,这显然有违DIY精神,不用也罢。
找来找去还是在gotdotnet上找到了两个串口操作类,国内这样的源码和资料真是太少了 :( 。在这里顺便感谢一下这些原创作者,如果不是他们的辛勤努力,我们可就得辛苦喽。找到的两个串口操作类是JustinIO和SerialStreamReader。最开始我用的是前者,后来在实验过程中发现这个类有一些BUG,功能也不完善。就改用了后者,SerialStreamReader本身也是一个串口调试工具,所以它基本上可以取代刚才在超级终端里做的那些工作。作为它里边的核心-SerialStream类直接继承自Stream类,这给我们的操作也带来了相当的便利,强烈推荐~(这两个类包在下面提供)
有了这两个类包,就意味着我们可以在自己写的程序里与串口进行通讯了,但可以通信并不意味着就可以发短信,因为凡是通讯都会有协议,而这里的通讯协议就是下面我要向大家介绍的收发短消息的三种模式。这三种模式分别是Block模式、Text模式和PDU模式。Block模式:需要手机生产厂家提供驱动支持,已被淘汰。Text模式:简单易行、不需要编码转,但只能发ASCII码,且支持此模式手机较少,多见于Nokia手机。PDU:支持此模式手机最多,兼容性好,但需要进行编码转换。
看了上面的介绍,毫无疑问我们的选择只有PDU了,网上关于PDU编码的例子很多,我参考的是蚕蛹写的一篇文章《C#开发终端式短信的原理和方法》,文章后边还有一个作者写的DEMO,相信会给初次接触串口编程的朋友带来很大帮助(包括我在内,谢谢蚕蛹)。他的DEMO里用的串口通讯类就是JustinIO。
现在似乎已经没有什么大问题了,动手做我们的程序吧,打开VS.NET,新建项目,把需要用到的类都导进来,就可以开始喽~~大家都是程序员,具体过程就不用我细说了吧。
这是我做的一个DEMO,样子是简陋了点,不过作为测试,功能已经足够
这么快就做出了一个可以发送短消息的程序来,是不是很有成就感~~呵呵,先陶醉一会吧。我们下次继续,88。
代码下载:
串口通讯组件:JustinIO.rarSerialStream.rar