前一段时间完成了一个简单的类库,虽然可以完成可以完成短信猫短信的发送与接收,但是类库还不是很完善。
如:英文短信的发送用的是USC2编码,每条短信最多可发送70字符。而如果用7bit编码则每条能发送160字符 ,本文即在之前类的基础上加入了PDU的编码。

  • 方案:和之前相同,仅加入了部分代码。
    PDU类更改了UserData的set访问器,以完成7bit编码,同时加入一个7bit编码函数。另外改动了部分函数名,以利于程序的可读性。
    GSMModem类加入SendMsg的重载加入一个参数判断是7bit编码还是USC2编码。
    具体方案见之前文章:
    短信猫软件的实现(C#)<四>PDU格式编码C#实现
    短信猫软件的实现(C#)<五>PDU格式解码C#实现
    短信猫软件的实现(C#)<六>发送接收短信C#实现(API)
  • PDU类:

UserData属性:
UserData仅改动的set访问器以便7bit编码
编码算法:
高低交换,从高每8位取为一个字符即可。例:
Test:
        T:01010100  e:01100101  s:01110011  t:01110100
    去最高位0,变为7位
    T:1010100  e:1100101  s:1110011  t:1110100
    高低位交换:tseT
    1110100 1110011 1100101 1010100
    从高位每8位取为一个位组:1 1010100  11 110010  100 11100  0000 1110
    D4F29C0E  完成编码!
源代码如下:

 1:  set
 2:   {
 3:      if (DataCodingScheme == "08" || DataCodingScheme == "18")           //USC2编码使用 原来部分:完成USC2
  4:      {
 5:          userData = string.Empty;
 6:          Encoding encodingUTF = Encoding.BigEndianUnicode;
 7:   
 8:          byte[] Bytes = encodingUTF.GetBytes(value);
 9:   
10:          for (int i = 0; i < Bytes.Length; i++)
11:          {
12:              userData += BitConverter.ToString(Bytes, i, 1);
13:          }
14:          userDataLenghth = (userData.Length / 2).ToString("X2");
15:      }
16:      else                                                                //7bit编码使用  添加内容 利于7bit编码
17:      {
18:          userData = string.Empty;
19:          userDataLenghth = value.Length.ToString("X2");                  //7bit编码 用户数据长度:源字符串长度
20:   
21:          Encoding encodingAsscii = Encoding.ASCII;
22:          byte[] bytes = encodingAsscii.GetBytes(value);
23:   
24:          string temp = string.Empty;                                     //存储中间字符串 二进制串
25:          string tmp;
26:          for (int i = value.Length; i > 0; i--)                          //高低交换 二进制串
27:          {
28:              tmp = Convert.ToString(bytes[i - 1], 2);
29:              while (tmp.Length < 7)                                      //不够7位,补齐
30:              {
31:                  tmp = "0" + tmp;
32:              }
33:              temp += tmp;
34:          }
35:   
36:          for (int i = temp.Length ; i > 0; i -= 8)                    //每8位取位一个字符 即完成编码 同时高位取为低位
37:          {
38:              if (i > 8)
39:              {
40:                  userData += Convert.ToInt32(temp.Substring(i-8, 8), 2).ToString("X2");
41:              }
42:              else
43:              {
44:                  userData += Convert.ToInt32(temp.Substring(0, i), 2).ToString("X2");
45:              }
46:          }
47:   
48:      }
49:  }

加入后只需读取字段userData即完成对应部分编码。

PDU7BitEncoder函数:
新加入7bit编码方法 代码如下:

 1:  public string PDU7BitEncoder(string phone, string Text)
 2:  {
 3:      if (Text.Length > 160)
 4:      {
 5:          throw new Exception("短信字数大于160");
 6:      }
 7:      dataCodingScheme = "00";
 8:      DestinationAddress = phone;
 9:      UserData = Text;
10:   
11:      return serviceCenterAddress + protocolDataUnitType
12:          + messageReference + destinationAddress + protocolIdentifer
13:          + dataCodingScheme + validityPeriod + userDataLenghth + userData;
14:  }

方法只完成对应属性的赋值,直接返回字段字符串即完成7bit的解码。

其他改动:

1:  public string PDUUSC2Encoder(string phone, string Text)

原来的方法名由PDUEncoder改为PDUUSC2Encoder,以是程序拥有更好的可读性。

  • GSMModem类:

枚举:为了便于区分短信类型(USC2编码还是7bit编码)加入枚举类型

1:  public enum MsgType { AUSC2, A7Bit };              //枚举 短信类型 AUSC2 A7Bit:7位编码 (中文用AUSC2,英文都可以 但7Bit能发送160字符,USC2仅70)

在命名空间GSMMODEM中加入枚举类型MsgType

SendMsg重载:

 1:  public void SendMsg(string phone, string msg, MsgType msgType)
 2:  {
 3:      if (msgType == MsgType.AUSC2)
 4:      {
 5:          SendMsg(phone, msg);
 6:      }
 7:      else
 8:      {
 9:   
10:      }
11:  }

如果类型为AUSC2,调用原来的发送方法 用USC2编码发送短信,如果是A7Bit类型用PDUEncoding类的7bit编码函数,程序尚未实现,将在下篇博客中给出详细源代码
当然,原来的调用PDU类的编码方法的地方做相应改动。

附件:工程项目文件

转载于:https://www.cnblogs.com/Engin/archive/2010/11/13/1876724.html

短信猫软件的实现(C#)九7bitPDU的编码相关推荐

  1. 8口短信猫设备支持的短信猫软件丰富可满足多种应用需求

    8口短信猫设备支持的短信猫软件丰富可满足多种应用需求,8口短信猫是指可以插入8张SIM手机卡同时使用的,性能.效率是单口的8倍,支持大小手机卡,通过一根USB数据线连接电脑,支持台式笔记本电脑,使用简 ...

  2. 8口短信猫设备配送开发包短信猫软件

    8口短信猫是集成了8个通讯模块的短信猫池,可以同时插入8张手机卡并发使用,具有比单口短信猫8倍的短信收发效率,可满足对短信收发.空号检测需求量更高的应用需求.8口短信猫是采用wavecom Q2303 ...

  3. C#通用类库--短信猫操作类1(原始AT命令)

    一个C#资源分享平台,专业分享学习高质量代码,每周期布置学习任务,激发学习C#兴趣!(QQ群:128874886)  关于C#操作短信猫的文章在博客园也有很多,其中个人认为比较专业的就是 给我一杯酒 ...

  4. 工业级短信猫彩信猫生产供应商法国wavecom原装

    天泽短信猫品牌厂家专业生产wavecom短信猫设备,原装模块性能稳定,工业级短信猫.彩信猫,可用于短信收发.彩信收发,有丰富短信猫软件支持可用于短信 群 发.手机空号检测.短信猫二次开发应用等.购买G ...

  5. 短信平台开发之短信猫资料简介

     短信猫 短信猫 所谓短信猫,其实是一种用来收发短信的设备,他和我们用的手机一样,需要手机SIM卡的支持,在需要收发短信的时候,在短信猫里面插入一张我们平时用的手机卡,插上电源,通过(USB或者串口. ...

  6. 短信平台的相关资料之短信猫

     短信猫 短信猫 所谓短信猫,其实是一种用来收发短信的设备,他和我们用的手机一样,需要手机SIM卡的支持,在需要收发短信的时候,在短信猫里面插入一张我们平时用的手机卡,插上电源,通过(USB或者串口. ...

  7. 金迪短信猫在linux下面的应用

    金迪短信猫在linux下面的安装: 首先需要安装两个软件gnokii.minicom,在ubuntu下面直接使用apt-get安装即可: apt-get -y install gnokii apt-g ...

  8. 短信猫 测试软件,因教室门窗忘关被扣分 高二女生发明监测小设备

    利用无线电波收发信息 李周婕和马延介绍,整个装置分3个部分: 第一部分上锁感应器安装在各扇门窗上,一把锁配备一个.可在门窗上锁和开锁瞬间向外发送无线电波传送信息:第二部分门边显示器安装在教室前门外.有 ...

  9. wavecom短信猫常用AT命令

    wavecom短信猫常用AT命令 一.一般命令 1. AT+CGMI 给出模块厂商的标识. 2. AT+CGMM 获得模块标识.这个命令用来得到支持的频带 (GSM 900,DCS 1800 或PCS ...

最新文章

  1. 【神经网络】(8) 卷积神经网络(Mobilenet_v1),案例:cifar图像10分类
  2. DefaultHashOperations multiget的一个坑
  3. 据阿里云EMR快速搭建数据平台(二)
  4. 1.11 多异常捕获
  5. 百度、头条、网易 Android 等社招面试题目
  6. python回收机制
  7. Java笔记-ReadWriteLock与Condition的使用
  8. 用户界面和兼容性测试
  9. 视频号、抖音、海外Tiktok到底该选择那个平台更好
  10. 夺命雷公狗---PDO NO:13 PDO的预处理查询4
  11. Python抓取打印机硒鼓和组件剩余量的爬虫
  12. python脚本性能分析
  13. QT入门(六)——代码创建计算器界面|可以计算的简易计算器|按键的关联
  14. 练字一定要用钢笔吗?
  15. 【Kafka】10道不得不会的 Kafka 面试题
  16. excel数据分析模块
  17. shields 徽标_纽约公共图书馆的新徽标
  18. 全部开源!高仿微信界面
  19. 嵌入式软件之应用调试
  20. php 怎么打开一个pdf,pdf是什么?用什么打开?

热门文章

  1. 思杰VDI外篇XDDC安装
  2. NET USE 命令用法
  3. 使用ASP.NET 2.0中的GridView控件
  4. Ubuntu硬盘全盘备份tar和clonezilla两种方案
  5. 用到的python组件
  6. 汽车编程都是用matlab,MATLAB编程与汽车仿真应用
  7. dojo中chart参数
  8. 认识HTML5的WebSocket 1
  9. IOCP编程之基本原理
  10. C# 图片处理之:彩色图片转为黑白图