关键词 CMPP协议;短消息;短消息网关;SP
0 引言
随着中国一跃成为世界上最大的移动通信市场,手机短信以它通信费用低廉,双向传输,通信质量可靠,速度快等显著优点受到了越来越多人的青睐,手机短信已被称为“第四媒体”。除了大量使用的手机用户之间的点对点短信业务之外,从信息平台到手机用户的短信信息服务业务也在快速 发展 ,该业务已经成为广大用户及时方便地获取信息的一种手段。
1 有关短消息,短消息业务及短消息服务平台
SMS(Short Messaging Service),是最早的,但仍是现在火爆全球的文本短消息服务;EMS(Enhanced Message Service)增强信息服务,是(SMS)的新版本,支持发送简单的图像、声音和动画等信息;MMS(Multimedia Messaging Service)多媒体短信服务,是 目前 短信技术开发最高标准的一种,支持多媒体功能,需要2.5G或3G的 网络 来支持它的运转。
本增值短消息服务平台的软件设计使用Visual C++作为前台开发工具,SQL Server 2000作为后台数据库,是一个是以手机为 应用 基础、以前台页面为操作界面,具有丰富增值服务 内容 的完整的、大规模短信息处理的系统。通过这个平台可以向中国移动、中国联通和小灵通等用户提供发送短信息、定制、点播/订阅、答题,积分福彩,投票 / 竞猜等短信服务,具体应用如电视、电台媒体开展互动业务;报纸、杂志媒体提供新闻服务;气象台、彩票中心、交警提供资讯、商场开展客户调查及促销活动服务等。为简单起见,本文只讨论其中基于中国移动短信网关(移动手机用户)的系统开发与实现。
2 CMPP协议的介绍
CMPP(China Mobile Peer to Peer)协议,全称是中国移动通信互联网短信接口协议,其规定了以下三个方面的内容:
(1)业务提供者(SP)与互联网短信网关(ISMG)之间的接口协议;
(2)互联网短信网关之间的接口协议;
(3)互联网短信网关和汇接网关(GNS)之间的接口协议。

图1 互联网短信网关组网结构
CMPP协议主要提供以下两类业务操作:
(1)短信发送(Short Message Mobile Originate)MO 操作:手机用户为起始端;
(2)短信接收(Short Message Mobile Terminated)MT操作:手机用户终止端;
CMPP协议和HTTP,FTP,SMTP等协议一样,处于TCP/IP网络模型的应用层,它以TCP/IP协议作为底层通信承载。SP与ISMG之间进行信息交互式可以采用长连接或短连接两种方式。本短消息服务平台所采用的连接方式为长连接,即: SP与ISMG以C/S方式建立连接时,在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发送链路检测包以维持连接。
3 系统的结构和功能模块图
3.1 系统的层次结构
本短消息服务平台,在典型的网络条件下,具有稳定可靠、处理能力高、组网能力强、系统管理方便、使用灵活等特点,能够满足功能性、稳定性、效率性的要求,同时,该系统拥有强大的后台管理功能和业务处理能力,从而为业务的可持续发展以及用户快速准确获取信息,创造了条件。
整个平台的组成分为四个层次:硬件、网络、通信层:包括支持系统运行的所有服务器、客户机及网络设备、通信链路以及存储设备、输入输出设备等硬件;操作系统层(系统软件层):基于硬件平台之上,提供基本的系统调用及网络通信功能(如Windows2000等);应用开发层:在操作系统之上的应用开发环境,包括软件开发工具数据库等(如Visual C++、SQL server 2000等);应用软件层(最外层):面向业务应用,使业务信息化和自动化,用户通过它进行业务上需要的信息处理、信息存储和信息传送等工作,是与操作人员直接相连的部分。
3.2 系统结构示意图介绍
系统主要由通信模块,业务处理模块,后台管理模块和数据库部分组成,其软件结构示意图如图2所示:

图2 系统软件结构示意图
系统支持CMPP3.0(中国移动)协议、SGIP(中国联通)、SMGP(中国电信、中国网通)、SMPP协议(国际标准)。包括MO(包括用户上行消息和状态报告)接收及MT下行的处理,通信程序的编写完全按照协议进行开发。
4 短消息服务平台通信模块的设计
通信模块是短消息服务平台的主要模块,它是SP(业务提供者)和各基础网络运营商网关之间的一条高质量的传输通道,负责接收和响应用户请求。该模块主要是通过多线程机制来处理由SP发送到短消息网关的消息和接收由短消息网关发送的消息。通信模块涉及到以下几个重要线程:消息发送线程,消息接收线程,业务处理线程(包括MO业务处理线程和MT业务处理线程),链路维持线程以及监控线程,其中监控线程作为主线程,是由MFC程序自动创建的主线程,用于创建和监控上述几个辅助线程。通信双方以C/S方式(SP作为客户端,ISMG作为服务器端)建立TCP连接,由函数
SP_Connect_ISMG (char IsmgIp [16],unsigned short IsmgPort)实现,该函数封装了TCP/IP的Socket连接建立的过程,其中参数IsmgIp和工IsmgPort分别为短消息网关的IP地址和端口号(CMPP3.0协议规定SP和网关之间的建立长连接时所用的端口号为7890),然后需要建立CMPP连接以实现SP和ISMG之间的短消息通信,该操作的目的是SP向ISMG注册成为一个合法SP的身份,由函数CMPP_Connect()来实现。至此,双方建立了基于TCP/IP的CMPP应用层连接。
该模块用两个缓冲队列来放置消息,它们分别是用来存放由网关发送的消息接收队列;存放SP发送到网关的消息发送队列。为了让多个线程可以互斥地从收发缓冲队列中存取数据包,必须遵循:当缓冲队列已满时,不能继续接收短信,所有消息接收线程(针对接收缓冲队列)或者MT业务处理线程(针对发送缓冲队列)必须等待;当缓冲队列为空时,不能继续取出短信,所有MO业务处理线程(针对接受缓冲
|
ISMG |
|
Receive thread |
|
Send thread |
|
Buffer queue queue queue |
|
Buffer queue queue queue |
|
Process thread TT queue queue |
|
Process thread queue queue |
|
Database |
队列)或者消息发送线程(针对发送缓冲队列)必须等待。本通信模块通过使用临界区和信号量技术处理了多线程之间的同步问题。

图3 通信模块工作流程图
短消息队列及其指针定义如下:
typedef struct cmpp_head {
unsigned long TotalLength;
/*消息总长度(含消息头和消息体)*/
unsigned long CommandId;
/* 命令或响应类型*/
unsigned long SequenceId;
/*消息流水号,顺序累加,步长为1*/
} CMPP_HEAD;
/*CMPP消息头*/
typedef struct cmpp_packet {
CMPP_HEAD Pk_head;
Char Data[CMPP_PKG_SIZE]; /*消息体*/
unsigned long Seqid;
/*统一消息流水号*/
CTime Time;
/*写入消息队列时间*/
BOOL Sourse;
/*消息类型判断(即为MO还是MT消息*/
} CMPP_PACKAGE;
/*消息的结构*/
CMPP_PACKAGE m_SmSend[MAX_SM_SEND]
// 发送短消息队列
CMPP_PACKAGE m_SmRecv[MAX_SM_RECV]
//接收短消息队列




