.net开发手机短信
如今开发手机短信的文章可多了,下面的地址更绝,收集了好多.net开发手机的技术文章(
串口编程文章列表: http://www.mcuchina.com/Article/Communication/SMS/Index.html〕
C#开发终端式短信原理及方法: http://www.mcuchina.com/Article/Interface/COM/COMPRG/200411/83.html), 对于不懂开发手机短信原理的同仁,看了上面的文章就应该知道了。俺在这里是要作个总结,好以后复习,^_^。
开发手机短信程序有3种方式:通过电信部门的网关、通过终端、利用一些网站提供的Webservice。偶这里只有第二种可行,并且我对于第二种方式也挺感兴趣,所以仔细地看了看。开发手机短信所用到的技术如下:
1、sms手机编解码
2、串口通信
sms手机编解码主要是用pdu模式,据说我的西门子3618支持,^_^。不懂这种编解码的就看这篇http://www.mcuchina.com/Article/Interface/COM/COMPRG/200411/81.html 还有这一篇http://www.mcuchina.com/Article/Interface/COM/COMPRG/200411/82.html。
串口通信就有些麻烦了,据说dotnet2.0中有了串口通信的类了,.net1.1则只能依靠第三方的帮助或直接调用API。第三方提供的类有::JustinIO、SerialStream, 上面的类俺还没用过,不好评价; 还可以调用mscomm这个 ocx 控件来实现,可以看这篇文章http://www.mcuchina.com/Article/Interface/COM/COMPRG/200411/113.html 了解怎么个用法。
我想,要熟悉串口编程,不能仅使用别人包装的类,还要了解串口相关的API哦!于是下载有《Visual C++串口编程》《Delphi串口通信编程》来看了相关的API,现在列出相关的API用法:
CreateFile ()打开串口
SetupComm设置串口输入输出缓冲区的大小, PurgeComm() 和 FlushFileBuffers()也是针对缓冲操作的;
GetCommState和SetCommState用于设置串口的状态(比如数据传输率、奇偶校验位等), 这里有个DCB数据结构,好复杂!还好, BuildCommDCB这个函数为我们提供了设置DCB结构的简便方法;
GetCommProperties()这个函数使我们能够获取串口的属性, Windows还提供有 CommConfigDialog()这个函数供我们调用以设置其属性;
读写串口分别用ReadFile()和WriteFile(), 跟文件操作一样,爽! 不过要是涉及到异步I/O操作就有些麻烦了,在串口编程中的异步I/O操作对应到WINDOWS的API, 术语就叫做“重叠”!相关的函数有 GetOverlappedResult() (^_^, 俺还没看明白);
要注意串口的读写超时设置,对应为:GetCommTimeOuts() 和 SetCommTimeOuts();
如果在通信的过程中出现了错误,一定要调用ClearCommError()才能继续通信;
要怎么样才知道串口有数据了呢?想起以前学接口技术时老师教的3种方式:轮询(即用while循环)、硬件中断方式、*^%$(还给老师了), 而windows下提供有事件来通知,相应的有 GetCommMask() 、SetCommMask(() 以及 WaitCommEvent();
还有几个设备控制命令函数: EscapeCommFunction()。SetCommBreak()用于挂起串口通信设备, ClearCommBreak()则做相反的操作;
最后, 别忘了用 CloseHandle() 关闭串口!
ps: 这个小子的BLOG(http://blog.csdn.net/hesicong/category/23319.aspx), 上面好多开发手机程序的文章