`
sjk2013
  • 浏览: 2185503 次
文章分类
社区版块
存档分类
最新评论

短信应用开发研究

 
阅读更多

短信应用开发研究

1 前言

随着移动通信网络的迅猛发展,基于移动通信网络的应用范围也迅速扩展,比如无线公话无线定位无线数据采集等等,这些应用都需要一定程度的远程通信能力,而采用何种无线通信方式成为这些应用开发面临的首要课题,高速的数据业务(GPRSCDMA1X)费用高设置复杂,相应的应用开发成本高技术难度大,因此我们迫切需要一种简单易用的数据通信方式。

移动短信业务作为移动早期数据业务的一种,经过几年的高速增长,现已成为移动主营业务的重要一块,短信以其简单易用、覆盖面广、资费便宜的特点,不仅成为人们日常沟通的重要工具,也成为无线网络通信的一种重要手段,可广泛应用于各种对实时性、流量要求不高的场合

现在,各种各样基于短信的应用层出不穷,比如各种短信信息查询、业务定制、数据采集、网管系统等等。

<shapetype id="_x0000_t75" path=" m@4@5 l@4@11@9@11@9@5 xe" stroked="f" filled="f" o:spt="75" o:preferrelative="t" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0 "></f><f eqn="sum @0 1 0 "></f><f eqn="sum 0 0 @1 "></f><f eqn="prod @2 1 2 "></f><f eqn="prod @3 21600 pixelWidth "></f><f eqn="prod @3 21600 pixelHeight "></f><f eqn="sum @0 0 1 "></f><f eqn="prod @6 1 2 "></f><f eqn="prod @7 21600 pixelWidth "></f><f eqn="sum @8 21600 0 "></f><f eqn="prod @7 21600 pixelHeight "></f><f eqn="sum @10 21600 0 "></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 303pt; HEIGHT: 120.75pt" coordsize="21600,21600" type="#_x0000_t75"><imagedata src="./%E7%9F%AD%E4%BF%A1%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E7%A0%94%E7%A9%B6.files/image001.gif" o:title="image002"></imagedata></shape>

1 一般基于短信的网管系统通信模式

2 短信应用简介

2.1 使用短信通信的特点

短信除了简单易用的优点以外,还有以下几个显著缺点,成为影响我们设计网络通信协议的重要因素:

1)由于移动网络,特别是短信中心的影响,短信存在丢失的可能。另外,网络为了确保终端收到,有时也会将同一条短信重发一次(当然,只计一条的费用)。

2)短信从发出到收到的时间不定(一般几秒钟,多至几分钟甚至数小时),由于短信中心转发时采用存储转发方式,长时间未收到并不代表短信已丢失。

3)先发出的短信,不一定先到达,到达顺序无法预计。

4)短信长度有限(最大160个英文字符),每一条能承载的信息较少,难以实现大数据量的传输(如文件的传递),现在逐渐成熟的彩信可传较多数据,但实现机制复杂。

2.2 短信发送方式

2.2.1 无线 Modem

使用GSM/CDMA Modem或支持AT指令发短信的手机,只要装上一张手机SIM卡或UIM卡,立即就可发送和接收短信(通过AT命令),进行和远程终端的通信。这种方式很易实现,但通信能力较低(中心网管的通信能力和终端一样!),只能通过多路的方式提高通信能力,目前多数简单网管使用这种方式,另外这种方式支持跨运营商网络通信(移动和联通手机已实现短信互通)。

<shape id="_x0000_i1026" style="WIDTH: 274.5pt; HEIGHT: 106.5pt" coordsize="21600,21600" type="#_x0000_t75"><imagedata src="./%E7%9F%AD%E4%BF%A1%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E7%A0%94%E7%A9%B6.files/image002.gif" o:title="image0011"></imagedata></shape>

2 使用无线Modem的方式

2.2.2 短信网关

这是目前最快的收发短信的方式,移动运营商一般针对ISP提供此种服务,ISP通常会获得一个专门的特服号码,通过数据专线连接到短信中心的短信网关服务器(通过SMPP/CMPP/SGIP协议),直接收发短信。这种方式吞吐量很大,但特殊号码资源有限,申请过程繁琐,另外还有一个缺点,不同运营商的特服号码只在本网内有效,如果需要双向通信的话,就只能在单一运营商的移动网内使用。

<shape id="_x0000_i1027" style="WIDTH: 234pt; HEIGHT: 104.25pt" coordsize="21600,21600" type="#_x0000_t75"><imagedata src="./%E7%9F%AD%E4%BF%A1%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E7%A0%94%E7%A9%B6.files/image003.gif" o:title="image006"></imagedata></shape>

3 使用直接连接短信网关的方式

2.2.3 Internet

现在,除移动运营商外,还有一些ISP(主要是大型门户网站)提供Internet上发送短信的服务,这种方式简单易用(通过HTTP方式连接),成本也低,但很难实现双向通信的功能。

<shape id="_x0000_i1028" style="WIDTH: 264.75pt; HEIGHT: 159.75pt" coordsize="21600,21600" type="#_x0000_t75"><imagedata src="./%E7%9F%AD%E4%BF%A1%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E7%A0%94%E7%A9%B6.files/image004.gif" o:title="image008"></imagedata></shape>

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通信过程定义

从分析可以得出,基于短信的通信是一种非面向连接的通信方式,它的一般通信过程如下图所示:

<shape id="_x0000_i1029" style="WIDTH: 262.5pt; HEIGHT: 149.25pt" coordsize="21600,21600" type="#_x0000_t75"><imagedata src="./%E7%9F%AD%E4%BF%A1%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E7%A0%94%E7%A9%B6.files/image005.gif" o:title="image010"></imagedata></shape>

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.38GSM 03.40GSM 07.05)。

短信网关和互联网方式没有这个问题。

4)参数设置灵活,人工干预度低,通信过程可监控。

5)由于普遍操作需要发送多条短信(尤其是中心网管),发送一般不能即时完成,所以收发工作可采用任务方式。

6)注意接收端识别发送方号码时,有时会有国家代码(如+8686)和区号前缀加在发送方号码前面,这主要跟双方号码归属和当地短信中心处理方式有关。

7)当用AT命令控制无线模块时,短信收发如果同时进行,处理时必须注意防止收发互相干扰,在实际应用中发现该问题经常存在。

3.4 短信应用软件方案设计

3.4.1 软件架构

如果业务逻辑简单,除通信模块以外,业务逻辑可直接实现在数据库上(使用触发器等方式),这样实现简单,效率高。

如果是复杂的应用,可采用如下的软件架构,即用WEB的方式实现三层架构,J2EE.NET框架都是很好的选择。

<shape id="_x0000_i1030" style="WIDTH: 6in; HEIGHT: 265.5pt" coordsize="21600,21600" type="#_x0000_t75"><imagedata src="./%E7%9F%AD%E4%BF%A1%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E7%A0%94%E7%A9%B6.files/image006.gif" o:title="image011"></imagedata></shape>

6 一种基于WEB方式的网管系统软件架构

3.4.2 一般功能

如果是用于无线公话等设备的网管系统,应具备电信管理网(TMNTelecommunication Management Network)规定的主要功能。它主要包括五大功能域:故障管理帐务管理配置管理性能管理安全管理。

4 短信应用未来发展

4.1 其他无线应用

随着无线终端应用面的进一步扩展,肯定会需要设计更多基于短信的通信协议,尽管应用功能可能不同,我们一样可利用如前所述的设计原则,采用相同的总体架构,必定可以帮助我们规避一定的实施风险。

4.2 使用数据通道

在不远的将来,无线数据通信业务必将成熟,所有的数据通信都将直接基于IP网络,这时可将本文提出的短信网管协议直接升级到UDP方式,由于两者都是非面向连接的协议,可只改变承载方式,而不用更改业务功能以及程序处理逻辑。

5 结束语

短信作为一种简单、廉价的通信方式,目前仍在飞速发展中,扩展的应用领域也越来越广,在移动数据业务未充分成熟之前,它还有很长的生存周期。各种无线终端设备快速涌现,对远程控制管理提出了新的要求,基于短信的通信方式是目前最简单实用的数据传输方式,制定实用的通信协议是每个短信应用开发人员的必须工作,本文将给他们以帮助。

参考协议及文献:

1 GSM协议

2短信网关协议(中移动CMPP联通SGIP

3 TCP/IP 协议

4 集成电路(IC)卡公用付费电话系统总技术要求

5 电信管理网(TMNTelecommunication Management Network)相关标准

6 简单网络管理协议(SNMPSimple Network Management Protocol)


附录:(实现实例)

短信学生成绩查询系统

1 需求分析

短信作为一种简单廉价的通信手段,已成为人们日常生活不可缺少的一部分。各大中小学校每年进行的各种考试越来越多,学生们普遍缺少一种方便﹑快捷的成绩查询方式,而校方也为此付出相当大的人力﹑物力去进行成绩发布,因此,建立一套可以自动运行﹑即时发布﹑随时查询的系统迫在眉睫。

短信学生成绩查询系统主要有两种查询方式:

1.1 学生主动发短信到校方服务器查询某科成绩

学生利用其手机按某种格式把学号,课程号发到校方服务器,校方服务器从成绩数据库检测到成绩,再通过短信的方式发还给学生。

1.2 校方主动发出学生成绩

当校方成绩出来后,将成绩入库,为最快通知学生,按数据库中已保存的学生电话号码,把成绩发送给他们。

2 系统设计

2.1 系统网络结构

校方架设查询服务器,通过无线Modem收发短信,学生通过手机发送短信到移动通信网络,移动通信网络将短信发送到服务器所接的无线Modem

<shape id="_x0000_i1031" style="WIDTH: 442.5pt; HEIGHT: 114.75pt" coordsize="21600,21600" type="#_x0000_t75"><imagedata src="./%E7%9F%AD%E4%BF%A1%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E7%A0%94%E7%A9%B6.files/image007.gif" o:title="image014"></imagedata></shape>

2.2 系统总体框架

整个系统分四层,底层是无线Modem(硬件),上面是软件系统。

软件系统分三层,通信程序是一层,负责和无线Modem通信,控制无线Modem收发短信;中间是数据库系统,可选AccessSQL Server等;上层应用管理系统只跟中间数据层接口,负责一些人机交互界面的处理,包括成绩录入状态监控等等。这样整个层次清晰明了,每个层次的功能单一,改动也不会影响另一层。由于目前的系统是演示系统,采用的是Access数据库,成绩查询功能做在通信层,如果是大型系统(如采用SQL Server),应将成绩查询逻辑做在中间数据层,这样扩展性更好。另外,如果学校自有成绩管理系统,可将成绩库和本系统之间建立接口,当成绩录入后,主动将数据转入本系统,这样数据录入工作也只做一次,可大大节省人力物力。

<shape id="_x0000_i1032" style="WIDTH: 363pt; HEIGHT: 336pt" coordsize="21600,21600" type="#_x0000_t75"><imagedata src="./%E7%9F%AD%E4%BF%A1%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E7%A0%94%E7%A9%B6.files/image008.gif" o:title="image016"></imagedata></shape>

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 表间关系

<shape id="_x0000_i1033" style="WIDTH: 414.75pt; HEIGHT: 262.5pt" coordsize="21600,21600" type="#_x0000_t75"><imagedata src="./%E7%9F%AD%E4%BF%A1%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E7%A0%94%E7%A9%B6.files/image009.jpg" o:title="image018"></imagedata></shape>

3 详细设计

3.1 管理子系统

管理子系统负责人机交互,主界面包括以下功能:

1) 短信收发日志监控

2) 学生管理:包括增加,删除,修改学生信息

3) 课程管理:包扩增加,删除,修改科目信息

4) 分数管理:学生科目分数录入

考虑这部分是简单数据库管理功能,具体界面和程序结构设计略,直接用VB编码实现。

3.2 通信子系统

通信子系统作为直接和硬件(无线Modem)打交道的部分,底层通信较多,用VC实现。其主要功能为短信收发,有简单监控界面,可分为以下部分实现:

1) 界面部分:包括服务开启关闭按钮,当前状态显示信息列表,状态包括初始化信息,收发信息等。

2) 数据库轮询线程:检查待发短信,将待发短信放入发送队列,队列采用先进先出队列。

3) 数据库访问模块:封装数据库操作。

4) 发送线程:循环检查发送队列,将待发短信发送到端口。

5) 接收线程:循环检查Modem,提取新短信,解析短信并以文本方式存入数据库。

6) Modem接口模块:负责直接AT命令操作,被发送和接收线程调用

7) 日志模块:记录详细通信日志。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics