手机收发短信V0.2

上一次发过一篇文章,是使用AT指令集对手机短信进行收发的。最近使用的时候发现了一些问题,因此进行了一系列的重构与修改。

问题:

(1) 有一些编码没有支持;

(2) 使用定时器接收短信,造成接收短信实时性很低;

(3) 所有操作均为同步操作,是应用程序效率降低;

调整:

1. 解码支持了3种编码:7位、8位与16位。

    对应于PDU编码中的TP-DCS,7位对应为00,8位对应为08,16位对应为19。7位解码对应的算法为7-bit解码,8位与16位对应于UniCode解码。经过测试,可以将手机、飞信与一款国外手机收发短信软件的短信解码成功。

2. 抛弃定时器方式接收短信

    前一版本中使用定时器对短信设备进行短信列表读取,AT+CMGL=4,这样造成实时性向当低,因此抛弃这种方式,采用轮询的方式进行设计,将发送短信列表命令与处理反馈信息封装为GetAllMessage方法。

    在类中定义一个BackgroundWorker实例,在后台轮询此方法。如果接收到短信之后进行处理。受到新的短信后会触发一个事件,但是这个事件是在异步调用中发送的,在消费端使用时需要进行主线程处理。

3. 在接收短信时采用失败处理

    我发现,如果手机终端对服务器发送短信过于频繁时,会出现读取不成功,解析随之不成功的问题。因此需要在Thread.Sleep(x),这个等待时间上下功夫。如果读取不成功,多等一等。我采用的方式就是将不成功的次数记录下来,如果发现有不成功的时候,瞪大的时间加长,让失败次数乘以默认等待时间,然后去等待,发现这个办法可行。但是如果客户端手机设备发送失败,我就没辙了。

4. 发送和接收的行为修改为异步

    以前接收和发送都是同步的方式,这样效率颇低。现在把发送改为异步,接收短信在单独的线程中异步执行,采用BackgroundWorker方式。这样整个应用程序不会出现假死现象。

 

源代码下载http://download.csdn.net/source/2347823

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值