综合GPRS调制解调器与MAS技术的短信催还系统
曾丽
广东海洋大学图书馆 湛江 524000
摘要

为解决图书馆无法向属于不同电信运营商的读者发送短信的问题,介绍一种综合GPRS 调制解调器与MAS的短信催还系统。基于原有的SIM300 GPRS模块和移动公司的MAS设备,研发USB接口的无线调制解调器。与此无线调制解调器硬件设备相配套,开发相应的图书馆短信发送与管理平台。系统投入实际运行后,运行稳定,效果显著。

关键词: GPRS; 短信; MAS
Combining GPRS Modem and MAS Technology for SMS Alerting System
Zeng Li
Library of Guangdong Ocean University, Zhanjiang 524000, China
Abstract

In order to solve the problem that the library can not send SMS to the readers belonging to different telecom agents, this paper introduces a SMS warning return system based on MAS and GPRS.This system uses a wireless modem with USB port based on SIM300 GPRS module and the MAS device of China Mobile. Moreover,a SMS sending and management platform which is compatible with the wireless modem mentioned above is developed. Now the system has been put into practice, and it is in a stable running and has been achieved outstanding effect.

Keyword: GPRS; SMS; MAS
1 引 言

短信催还图书技术由于具有速度快、方便和成本低廉等优点,在许多图书馆得到了应用。当前使用的主要技术有:GPRS调制解调器或者电信运营商的MAS(移动代理服务器)[ 1]。采用GPRS调制解调器方式能向所有的用户发送短信,但费用高;采用MAS发送的目标号码受电信运营商限制,但是费用较低。大学图书馆读者的手机号码可能有多种选择,单独采用一种技术无法合理解决发送催还短信问题。通过统计本校读者的手机使用情况后,笔者设计出一套综合利用两种技术并能够适应实际电信环境的短信图书催还系统。基本思路为:向中国移动租用MAS后,依靠自主开发的GPRS调制解调器,在ASP.NET[ 2]平台下,综合利用COM+[ 3]和虚拟驱动程序技术,实现向不同运营商的手机用户发送短消息的功能。

2 系统架构设计

图书馆的职责是公平地向每一位读者提供可靠的服务,电信运营商之间的竞争不应该影响图书馆的服务质量。通过本校图书馆数据库中的读者信息,得出读者手机使用情况为:中国移动占60%-70%,中国联通和中国电信占30%-40%。根据上述情况,设计向中国移动租用MAS,而采用GPRS调制解调器向中国联通和中国电信用户发送信息,发送设备的选择可以由软件根据读者的手机号码进行决策。

设计系统的整体拓扑图如图1所示:

图1 系统整体拓扑图

系统的核心是短信应用服务器,其通过USB接口连接GPRS调制解调器,同时与MAS和数据库服务器通过交换机连接。路由器内置防火墙,用于屏蔽外部的非法访问和攻击。读者可以通过互联网上任意机器访问短信服务器,将个人关键信息如借书证号、密码和手机号码输入网络,进行网络注册。工作人员通过网络完成读者信息添加、报表生成和短信发送等功能。系统采用的软件开发平台为ASP.NET,其中GPRS调制解调器的硬件为自主研发。目前系统设计为每天由工作人员定时发送短信。

为保障系统的安全性,在设计上采取了相关措施:

(1)图书馆的应用系统是深圳大学图书馆开发的SULCMIS第三版[ 4],采用的数据库是Sybase System 10。短信应用服务器的用户授权只能从数据库服务器上读取读者的借阅相关信息,没有写入和修改权限,而与短信催还相关的读者信息,如电话号码等采用了Access本地数据库,存放在短信应用服务器上,由短信应用服务器进行处理;

(2)为了方便工作人员与读者进行操作以及提高安全性,系统采用了B/S架构,读者和工作人员通过浏览器与短信催还系统进行交互;

(3)为了提高网络安全等级,MAS设置为固定IP访问,GPRS调制解调器设置为本地访问,防止黑客攻击或者木马病毒破坏。

3 系统模块实现
3.1 GPRS调制解调器的硬件与软件设计

本系统使用的GPRS调制解调器采用SIM300[ 5]模块作为无线通信模块,该模块有完整的GPRS功能,利用它与SIM卡和其他外围器件设计成可以直接使用的GPRS调制解调器。在此采用自制的GPRS调制解调器模块并通过串口与系统连接,运用GPRS模块的AT指令对串口进行编程。

目前,由于标准串口已经从大量的PC上消失,SIM300的串口不能在短信服务器上直接使用,因此设计上利用了一个串口转USB的芯片CH341[ 6, 7],实现与短信服务器通过USB接口进行连接,同时需要在短信服务器上安装CH341的虚拟串口驱动软件。

为了在短信服务器上驱动串口,必须安装MSComm软件,该软件原来是VB下的一个ActiveX控件,如果需要在ASP.NET下使用,必须将其设置为系统的一个COM+,然后通过ASP.NET内嵌的C#代码调用其端口初始化与发送短信功能,其初始化关键代码如下:

if (com.PortOpen) return false;

com.RThreshold = 1; //设置通信端口

com.Settings = "9600,N,8,1";

com.DTREnable = true;

com.Handshaking = MSCommLib.HandshakeConstants.comNone;

com.InputMode = MSCommLib.InputModeConstants.comInputModeText; com.InputLen = 0;

com.NullDiscard = false;

com.PortOpen = true;

短信发送的关键代码如下:

string comd;

comd = "AT+CMGF=1" + '\r';

com.Output = comd;

System.Threading.Thread.Sleep(100);

需要注意的是:短信模块发送时采用的是UCS2编码,而计算机通常处理的汉字是GB码,只有将计算机的GB码转换为UCS2码,信息才能发送出去,否则手机会接收到乱码。调制解调器的系统整体结构如图2所示:

图2 GPRS调制解调器系统整体结构图

3.2 MAS的设置

MAS是由电信运营商提供的一台设备,其不仅为各种类型的集团客户直接提供了丰富的短信业务应用功能,而且提供强大的短信接入机制。此机制允许客户再接入任何其他系统以开发此系统的短信应用功能。

开发短信模块所涉及的API主要有两个:

(1) init(imIP, loginName, loginPWD, apiCode, dbName)

本方法用于初始化,包括建立到MAS的连接,分配所属资源。

原型: public int init (String imIP, String loginName, String loginPWD, String apiCode, String dbName)

参数解析:

imIP:MAS的IP地址。

loginName:接口创建时的接口登录名。

loginPWD:接口创建时的接口登录密码。

apiCode:接口编码。

dbName:数据库名称。

返回值:Int. IMAPI_SUCC, IMAPI_CONN_ERR, IMAPI_API_ERR。

(2) sendSM(mobile, content, smID)

本方法用于发送一条MT短信到某个手机号码。

原型: public int sendSM(String mobile, String content, long smID)

参数解析:

mobile:短信发送的目的手机号码。

content:普通短信内容,最大支持 2 000个汉字的短信,超过2 000时会被截断。

smID:短信ID,0到99 999 999中的某一整数。确保唯一后可以用来找到对应的回执、回复。

返回值:Int. IMAPI_SUCC,IMAPI_INIT_ERR,IMAPI_CONN_ERR, IMAPI_DATA_ERR,IMAPI_DATA_TOOLONG,IMAPI_IFSTATUS_INVALID,IMAPI_GATEWAY_CONN_ERR。

移动代理网关初始化与短信发送的关键代码如下:

private String[] initvalues = new String[] { "成功", "连接失败", "用户名或密码错误", "密码错误", "接口编码不存在" };

APIClient ac = new APIClient();

int con=ac.init("210.38.138.250","admin","gdoulib123","gdoulib","mas");

con = System.Math.Abs(con);

MessageBox.Show (initvalues[con], "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

a = mydataReader.GetString(2).Trim();

ac.sendSM(a,b,c);

3.3 系统软件设计与实现

软件系统功能上分为读者注册模块和工作人员管理模块。读者注册模块的功能相对简单,读者需要提供卡号、密码、电话号码和验证码。如果号码更新,则新号码将替代旧的电话号码。工作人员管理模块比较复杂,其模块的功能描述如图3所示:

图3 工作人员管理模块功能描述图

主要功能有:提供管理员登录接口;登录界面后通过选择相应功能完成相应信息的修改;通过对数据库的读写完成对信息的更新、发布和删除;提供管理员文本编辑窗口进行新信息的编辑,完成编辑即可写入数据库;主页程序通过读数据库实现信息的查询和对借书超期的人员发送短信通知。其实现接口图如图4所示:

图4 系统实现模块接口图

软件设计上选择ASP.Net2.0作为主要开发工具,并且同时采用了Access数据库与Sybase数据库。同时采用两种数据库的原因是为了保障数据的安全性。图书馆的重要信息都存在于Sybase主数据库里,短信催还系统需要访问Sybase主数据库以获得读者相关信息,而不需要向Sybase主数据库写入内容;与短信相关的信息,如读者的电话等不需要加入图书馆的Sybase数据库,对于短信服务器的数据库访问权限设置为只读。短信服务器必须暴露在外网让读者访问,因此受到黑客和病毒攻击的可能性极大,在采用上述措施后,即使短信服务器被黑客攻陷,但由于没有对数据库的写入权限,黑客也无法攻击图书馆的Sybase主数据库,从而保证了数据的安全性。Access数据库中放置的只是读者电话和ID信息,读者密码放置在Sybase数据库中,即使短信服务器被攻陷,所造成的损失也是有限的。

根据电话号码选择发送方式是本系统的一个特点,其基本思想是根据读者电话号码的不同区段选择不同的发送设备,其关键代码如下:

if ((int.Parse(myDataReader.GetString(2).Trim())< 13400000000) ||

((int.Parse(myDataReader.GetString(2).Trim()) < 15700000000 )&&

(int.Parse(myDataReader.GetString(2).Trim()) > 15600000000)) ||

(int.Parse(myDataReader.GetString(2).Trim()) < 10000000000))

//该号码属于联通或者小灵通用户,采用GPRS Modem发送

{

s = sms.phonenumberUCS2(myDataReader.GetString(2).Trim() + "F");

content = "0011000D9168" + s + "0008A7" + sms.EncodingUCS2(num);

str = "AT+CMGS=" + (content.Length - 2) / 2 + '\r'; //产生命令字符串

com.Output = str;

System.Threading.Thread.Sleep(100);

str = content + '\u001a';

com.Output = str;

System.Threading.Thread.Sleep(900); //等待发送完毕

}

Else //该号码属于移动用户,采用MAS接口发送

{

sendPDU(myDataReader.GetString(2).Trim(), sms.EncodingUCS2(num), 0, 0, 0, 0, "", "", "", 0);//向MAS发送信息

}

4 结 语

本系统的开发综合了GRPS调制解调器和MAS网关的优点,通过硬件与软件的联合开发,合理解决了无法向选择不同电信商的读者发送短信的问题。系统在实际运行中稳定可靠,读者反馈信息良好,有效解决了读者超期的问题,取得了良好的服务效果。

但是系统还是存在一些不足:

(1)系统需要人工操作,不能实现每日无人值守自动定时发送;

(2)短信服务器在停电等事故后需要人工重新启动,系统无法自我恢复;

(3)需要添加一套专用的短信服务器,增加了成本投入。

为了解决上述问题,系统开发人员正在研发一套采用嵌入式系统的短信服务器,可以通过嵌入式设备访问数据库,控制设备以及提供Web服务。其具有体积小、成本低、安全性高、断电自恢复和无人值守等特点,相信在设计完毕后能为图书馆提供更好的服务。

参考文献
[1] 移动代理服务器(MAS)短信系统简介[EB/OL]. (2007-04-29). [2009-11-11]. http://hi.baidu.com/raynet/blog/item/cfa899d639dce82e07088bac.html. [本文引用:1]
[2] Richard Anderson, Brian Francis, et al. ASP. NET高级编程[M]. 王毅, 杨浩, 等译. 北京: 清华大学出版社, 2002: 56-78. [本文引用:1]
[3] Mridula Pariha. ASP NET宝典[M]北京: 电子工业出版社2002: 104-118. [本文引用:1] [JCR: 0.5]
[4] 胡志宙, 姚建芷. 基于ASP. NET实现SULCMIS系统催还表单[J]. 图书馆论坛, 2006, 26(2): 133-135. [本文引用:1]
[5] SIM300 Hardware Interface Description[EB/OL]. (2005-07-25). [2009-11-11]. http://www.datasheet4u.com/html/S/I/M/SIM300_Simcom.pdf. [本文引用:1]
[6] CDEV论坛. USB 总线转接芯片CH341[EB/OL]. (2006-07-18). [2009-11-11]. http://www.icdev.com.cn/bbs/viewthread.php?tid=282. [本文引用:1]
[7] MCU博客. USB转串口电路图(CH341A)[EB/OL]. (2007-08-21). [2009-11-11]. http://www.mcublog.com. [本文引用:1]