短信应用开发研究
1 前言
随着移动通信网络的迅猛发展,基于移动通信网络的应用范围也迅速扩展,比如无线公话、无线定位、无线数据采集等等,这些应用都需要一定程度的远程通信能力,而采用何种无线通信方式成为这些应用开发面临的首要课题,高速的数据业务(GPRS和CDMA1X)费用高、设置复杂,相应的应用开发成本高、技术难度大,因此我们迫切需要一种简单易用的数据通信方式。
移动短信业务作为移动早期数据业务的一种,经过几年的高速增长,现已成为移动主营业务的重要一块,短信以其简单易用、覆盖面广、资费便宜的特点,不仅成为人们日常沟通的重要工具,也成为无线网络通信的一种重要手段,可广泛应用于各种对实时性、流量要求不高的场合。
现在,各种各样基于短信的应用层出不穷,比如各种短信信息查询、业务定制、数据采集、网管系统等等。
图1 一般基于短信的网管系统通信模式
2 短信应用简介
2.1 使用短信通信的特点
短信除了简单易用的优点以外,还有以下几个显著缺点,成为影响我们设计网络通信协议的重要因素:
(1)由于移动网络,特别是短信中心的影响,短信存在丢失的可能。另外,网络为了确保终端收到,有时也会将同一条短信重发一次(当然,只计一条的费用)。
(2)短信从发出到收到的时间不定(一般几秒钟,多至几分钟甚至数小时),由于短信中心转发时采用存储转发方式,长时间未收到并不代表短信已丢失。
(3)先发出的短信,不一定先到达,到达顺序无法预计。
(4)短信长度有限(最大160个英文字符),每一条能承载的信息较少,难以实现大数据量的传输(如文件的传递),现在逐渐成熟的彩信可传较多数据,但实现机制复杂。
2.2 短信发送方式
2.2.1 无线 Modem
使用GSM/CDMA Modem或支持AT指令发短信的手机,只要装上一张手机SIM卡或UIM卡,立即就可发送和接收短信(通过AT命令),进行和远程终端的通信。这种方式很易实现,但通信能力较低(中心网管的通信能力和终端一样!),只能通过多路的方式提高通信能力,目前多数简单网管使用这种方式,另外这种方式支持跨运营商网络通信(移动和联通手机已实现短信互通)。
图2 使用无线Modem的方式
2.2.2 短信网关
这是目前最快的收发短信的方式,移动运营商一般针对ISP提供此种服务,ISP通常会获得一个专门的特服号码,通过数据专线连接到短信中心的短信网关服务器(通过SMPP/CMPP/SGIP协议),直接收发短信。这种方式吞吐量很大,但特殊号码资源有限,申请过程繁琐,另外还有一个缺点,不同运营商的特服号码只在本网内有效,如果需要双向通信的话,就只能在单一运营商的移动网内使用。
图3 使用直接连接短信网关的方式
现在,除移动运营商外,还有一些ISP(主要是大型门户网站)提供Internet上发送短信的服务,这种方式简单易用(通过HTTP方式连接),成本也低,但很难实现双向通信的功能。
图4 通过Internet的方式
最近,湖北移动推出了一个叫“全球通地址簿”的个人软件,也可以让手机用户实现网上发短信的功能,但不是使用HTTP方式实现。
2.2.4 三种方式比较
以上三种方式,是目前基于短信通信的主要方式,他们各有优缺点,开发应用时应根据需求和实际情况选择合适的方案。
| 无线Modem | 短信网关 | Internet |
发送速度 | 慢 | 最快 | 较快 |
回发能力 | 可 | 可 | 不可 |
跨网发送 | 可 | 不可 | 可 |
通信协议 | 串口AT命令 | CMPP/SGIP (基于TCP/IP) | HTTP |
实施 | 简单 | 复杂 | 中等 |
表1 三种短信发送方式比较
3 短信协议设计
任何通信过程,必须以通信双方能够理解的方式进行,也就是说,必须制定相应的通信协议,针对短信的特点,我们提出以下新短信通信协议的设计:
3.1 设计原则
(1)减少短信量,尽可能在有限的短信长度(普通英文短信160个字符)内,传递较多的信息。减少短信量,不仅可以使通信快速,更重要的是,可以节省短信使用的费用!
(2)能够在较长时间内实现发送/确认机制,但必须可以关闭回复确认功能(某些情况下,不宜让终端产生短信费用)。另外,某些应用要求终端要求支持主动信息上报的功能,所以协议应是双向的。
(3)应用协议必须有相当的可扩展性,便于以后添加功能或改变到直接的数据方式(UDP)。
(4)大部分终端处理能力有限(比如一般使用8位单片机做CPU的无线公话),网管短信处理逻辑应简单,以不影响终端的其他功能使用,并且容易在C等语言下实现为原则。
(5)为减少短信量,可采用一些简单的压缩算法,比如采用高进制表示数据,连续相似数据压缩等简单算法。
(6) 对敏感信息,能实现加密的要求,但无论是压缩还是加密,都应是基于可视英文ASCII符,以便于编码实现和接收处理。
(7)安全问题,主要是认证和访问控制。
3.2通信过程定义
从分析可以得出,基于短信的通信是一种非面向连接的通信方式,它的一般通信过程如下图所示:
图5 消息类型和通信过程
(1) Get-request(Get):请求一个或多个变量的值
(2) Get-response(Get-r):返回一个或多个变量的值
(3) Set-request(Set):设置一个或多个终端参数
(4) Set-response(Set-r):设置响应消息
(5) Trap(Trap):当终端发生重要事件时,通知NMS
其中,Set-response消息可以不发出,这由Set-request消息指定(为确保收到,应要求响应,NMS就可自行实现相应的超时和重传机制,考虑到短信的特殊性,超时时间应可定义较长,滑动窗口可定义较大,但有时为了不令终端产生短信费用,应不要求响应)。
3.3 应用开发注意事项
(1)各模块之间低耦合,高内聚。业务逻辑改变不影响通信方式,通信方式改变不影响业务逻辑。
(2)可适应多种平台和数据库,比如Windows XP+Access或者Windows 2000 Server+SQL Server,这是为了发布时即可在低成本低性能的PC平台上运行,又可在高性能的服务器平台上运行,以支持多种形式、不同规模的应用。
(3)应用协议应基于可视ASCII字符,若一定要收发中文,可采用自行编码的方案,也可在Modem和终端上使用PDU模式(手机、无线模块等支持的一种短信收发模式,这种模式下支持发送Unicode编码的信息),但对于终端上的单片机而言,自行编解码会造成较大的系统开销,具体实现可参照ESTI制订的SMS规范(GSM 03.38、GSM 03.40和GSM 07.05)。
短信网关和互联网方式没有这个问题。
(4)参数设置灵活,人工干预度低,通信过程可监控。
(5)由于普遍操作需要发送多条短信(尤其是中心网管),发送一般不能即时完成,所以收发工作可采用任务方式。
(6)注意接收端识别发送方号码时,有时会有国家代码(如+86或86)和区号前缀加在发送方号码前面,这主要跟双方号码归属和当地短信中心处理方式有关。
(7)当用AT命令控制无线模块时,短信收发如果同时进行,处理时必须注意防止收发互相干扰,在实际应用中发现该问题经常存在。
3.4 短信应用软件方案设计
3.4.1 软件架构
如果业务逻辑简单,除通信模块以外,业务逻辑可直接实现在数据库上(使用触发器等方式),这样实现简单,效率高。
如果是复杂的应用,可采用如下的软件架构,即用WEB的方式实现三层架构,J2EE和.NET框架都是很好的选择。
图6 一种基于WEB方式的网管系统软件架构
3.4.2 一般功能
如果是用于无线公话等设备的网管系统,应具备电信管理网(TMN:Telecommunication Management Network)规定的主要功能。它主要包括五大功能域:故障管理、帐务管理、配置管理、性能管理、安全管理。
4 短信应用未来发展
4.1 其他无线应用
随着无线终端应用面的进一步扩展,肯定会需要设计更多基于短信的通信协议,尽管应用功能可能不同,我们一样可利用如前所述的设计原则,采用相同的总体架构,必定可以帮助我们规避一定的实施风险。
4.2 使用数据通道
在不远的将来,无线数据通信业务必将成熟,所有的数据通信都将直接基于IP网络,这时可将本文提出的短信网管协议直接升级到UDP方式,由于两者都是非面向连接的协议,可只改变承载方式,而不用更改业务功能以及程序处理逻辑。
5 结束语
短信作为一种简单、廉价的通信方式,目前仍在飞速发展中,扩展的应用领域也越来越广,在移动数据业务未充分成熟之前,它还有很长的生存周期。各种无线终端设备快速涌现,对远程控制管理提出了新的要求,基于短信的通信方式是目前最简单实用的数据传输方式,制定实用的通信协议是每个短信应用开发人员的必须工作,本文将给他们以帮助。
参考协议及文献:
1 GSM协议
2短信网关协议(中移动CMPP,联通SGIP)
3 TCP/IP 协议
4 集成电路(IC)卡公用付费电话系统总技术要求
5 电信管理网(TMN:Telecommunication Management Network)相关标准
6 简单网络管理协议(SNMP:Simple Network Management Protocol)
附录:(实现实例)
短信学生成绩查询系统
1 需求分析
短信作为一种简单﹑廉价的通信手段,已成为人们日常生活不可缺少的一部分。各大中小学校每年进行的各种考试越来越多,学生们普遍缺少一种方便﹑快捷的成绩查询方式,而校方也为此付出相当大的人力﹑物力去进行成绩发布,因此,建立一套可以自动运行﹑即时发布﹑随时查询的系统迫在眉睫。
短信学生成绩查询系统主要有两种查询方式:
1.1 学生主动发短信到校方服务器查询某科成绩
学生利用其手机按某种格式把学号,课程号发到校方服务器,校方服务器从成绩数据库检测到成绩,再通过短信的方式发还给学生。
1.2 校方主动发出学生成绩
当校方成绩出来后,将成绩入库,为最快通知学生,按数据库中已保存的学生电话号码,把成绩发送给他们。
2 系统设计
2.1 系统网络结构
校方架设查询服务器,通过无线Modem收发短信,学生通过手机发送短信到移动通信网络,移动通信网络将短信发送到服务器所接的无线Modem。
2.2 系统总体框架
整个系统分四层,底层是无线Modem(硬件),上面是软件系统。
软件系统分三层,通信程序是一层,负责和无线Modem通信,控制无线Modem收发短信;中间是数据库系统,可选Access或SQL Server等;上层应用管理系统只跟中间数据层接口,负责一些人机交互界面的处理,包括成绩录入﹑状态监控等等。这样整个层次清晰明了,每个层次的功能单一,改动也不会影响另一层。由于目前的系统是演示系统,采用的是Access数据库,成绩查询功能做在通信层,如果是大型系统(如采用SQL Server等),应将成绩查询逻辑做在中间数据层,这样扩展性更好。另外,如果学校自有成绩管理系统,可将成绩库和本系统之间建立接口,当成绩录入后,主动将数据转入本系统,这样数据录入工作也只做一次,可大大节省人力物力。
2.3 数据设计
2.3.1 表设计
AppLayerRecv 短信接收表
字段名 | 类型 | 长度 | 默认值 | 说明 | 主键 |
ID | 长整型 |
|
| 自动编号 | √ |
PhoneNumber | 字符 | 20 |
| 电话号码 |
|
Content | 字符 | 160 |
| 短信内容 |
|
RecvTime | 日期/时间 |
| Date()+Time() | 接收时间 |
|
ReadFlag | 数字 |
| 0 | 读标记 |
|
AppLayerSend 短信发送表
字段名 | 类型 | 长度 | 默认值 | 说明 | 主键 |
ID | 长整型 |
|
| 自动编号 | √ |
PhoneNumber | 字符 | 20 |
| 电话号码 |
|
PWIndex | 数字 |
| 255 | 发送状态标示 |
|
SendTime | 日期/时间 |
|
| 发送时间 |
|
SendCount | 数字 |
| 0 | 发送次数 |
|
Priority | 数字 |
| 1 | 发送优先级 |
|
Content | 字符 | 160 |
| 短信内容 |
|
TaskTime | 日期/时间 |
| Date()+Time() | 任务提交时间 |
|
ScheduleSendTime | 日期/时间 |
|
| 计划发送时间 |
|
Class 班级
字段名 | 类型 | 长度 | 默认值 | 说明 | 主键 |
ClassNumber | 数字 |
|
| 班级代码 | √ |
Name | 字符 | 50 |
| 班级名称 |
|
Teacher | 字符 | 50 |
| 老师 |
|
Score 成绩
字段名 | 类型 | 长度 | 默认值 | 说明 | 主键 |
SubjectNumber | 字符 | 20 |
| 科目号 | √ |
StudentNumber | 字符 | 20 |
| 学号 | √ |
Score | 数字 |
|
| 分数 |
|
SmsNoteFlag | 数字 |
| 0 | 发送标记 |
|
Student 学生
字段名 | 类型 | 长度 | 默认值 | 说明 | 主键 |
StudentNumber | 字符 | 20 |
| 学号 | √ |
Name | 字符 | 20 |
| 姓名 |
|
InputDate | 日期/时间 |
| Date() | 入库时间 |
|
Mobile | 字符 | 20 |
| 移动电话 |
|
OtherTel | 字符 | 20 |
| 联系电话 |
|
ClassNumber | 数字 |
|
| 班级代码 |
|
Subject 科目
字段名 | 类型 | 长度 | 默认值 | 说明 | 主键 |
SubjectNumber | 字符 | 20 |
| 科目号 | √ |
Name | 字符 | 100 |
| 班级名称 |
|
2.3.2 表间关系
3 详细设计
3.1 管理子系统
管理子系统负责人机交互,主界面包括以下功能:
1) 短信收发日志监控
2) 学生管理:包括增加,删除,修改学生信息
3) 课程管理:包扩增加,删除,修改科目信息
4) 分数管理:学生科目分数录入
考虑这部分是简单数据库管理功能,具体界面和程序结构设计略,直接用VB编码实现。
3.2 通信子系统
通信子系统作为直接和硬件(无线Modem)打交道的部分,底层通信较多,用VC实现。其主要功能为短信收发,有简单监控界面,可分为以下部分实现:
1) 界面部分:包括服务开启﹑关闭按钮,当前状态显示信息列表,状态包括初始化信息,收发信息等。
2) 数据库轮询线程:检查待发短信,将待发短信放入发送队列,队列采用先进先出队列。
3) 数据库访问模块:封装数据库操作。
4) 发送线程:循环检查发送队列,将待发短信发送到端口。
5) 接收线程:循环检查Modem,提取新短信,解析短信并以文本方式存入数据库。
6) Modem接口模块:负责直接AT命令操作,被发送和接收线程调用
7) 日志模块:记录详细通信日志。