代码改变世界

短信猫编程注意事项

2011-04-12 11:36  zhoujie  阅读(3500)  评论(11编辑  收藏  举报

刚刚把手机短信功能加到了公司OA系统中,短信猫足以满足公司目前的业务需要。遇到了一些问题和疑惑记录下来备忘。

原理说白了就是串口编程:.net 提供的SerialPort类很好的抽象了此类编程,write写数据到串口,read从串口读数据;相应的OutBuffer就是输出缓冲区,InBuffer就是输入缓冲区。只不过短信猫接受的是AT命令。

注意事项:

1、短信猫是一个设备,有他自己的状态。具体体现在AT+CMGS命令上,这个命令就是用于具体发送短信的,也是最复杂的一个命令,需要与设备有两次交互:(1)首先写串口数据:AT+CMGS=<短信长度>/r;这是读串口数据到">",大于号其实是一个提示符,是短信猫提示我们要输入真正的短信内容了。(2)写短信内容到串口,以char26结尾。

问题就在于他需要2步完成,如果在第一步完成后接着出错了,设备就进入假死状态了:再给他发什么命令,都只会收到大于号">"。解决方法是:发送esc(27)取消上次短信发送。

2、串口编程的特性同时只允许一个线程读写串口。如果一个线程在发送短信时,另一个线程随便发送一个数据到串口。发送短信的线程一定会收到“error"消息。

我们只能把所有的数据放到队列中,一个一个顺序发送。

3、串口是两根数据传输线,不是一根。一根用于发送数据,一根用于接收数据。