CMPP2.0 协议SP端的·NET开发

本文详细介绍了CMPP2.0协议SP端.NET实现的关键点,包括协议简介、交互模式、消息分类、消息数据结构、安全验证、厂商API问题以及C#实现。针对SP端开发中的消息发送、接收、线程同步和事件模型进行了深入讨论,旨在帮助开发者理解和实现CMPP协议。
摘要由CSDN通过智能技术生成

http://blog.csdn.net/shanhe/archive/2005/01/03/238815.aspx
内容简介
:本文介绍了CMPP2.0协议SP.net实现需要注意的问题,并提供解决方案和参考意见,对CMPP协议做一个解读参考。

 

关键字CMPP 2.0 SMS ISMG Socket 线程 线程同步 .Net事件模型

 

一、CMPP协议简介

中国移动通信互联网短信网关接口协议(China Mobile Peer to Peer CMPP),是中国移动梦网内部各SMS参与节点相互交换SMS的官方协议。作为梦网的参与方,移动梦网的增值服务商(Service Provider SP )要按照此协议规范实现SP的部分,才可以将自己的短信通过移动的GSM网络的数据通道传输到最终手机用户上。

实际上,协议规范了3个方面的内容:

SP与移动的互联网短信网关(Internet Short Message Gateway,ISMG)之间的接口协议

ISMG之间的接口协议(譬如移动各省、市之间的短信息交换通过ISMG之间进行)

ISMG与汇接网关(Gateway Name Server GNS,类似互联网上的DNS服务器)之间的接口协议,譬如跨省之类的短信需要GNS的帮助指出当前ISMG该如何传递短信。

其中,后二方面属于移动短信息系统内部实现,对于SP来讲大概可以“透明”来看待,只要实现了SPISMG的正确交互,就可以实现接入移动梦网短信系统。我们关心的只是SP端的开发细节。

 

二、CMPP交互模式

从手机用户角度讲,按短信的发起/接收路径来讲,有两个叫法:

MT(Short Message Mobile Terminated, SMMT),短信接收,短信从SP发送到手机用户。

MO (Short Message Mobile OriginateSMMO),短信发送,短信从手机用户端发送到目标SP

这两类短信交互,从SP端来看,都是属于Socket传输应用,CMPP的协议是以TCP/IP协议作为底层承载协议的,属于TCP/IP协议栈之上的应用。

SPISMG的交互连接分长连接短连接

所谓短连接,就是一次连接,传输一个消息,然后等待回复后拆除连接,显然,效率很低,所以,基本上不被考虑(实际应用移动也不允许SP采用短连接,只是不明白移动为什么还要写入文档? ISMG间会需要?)

所谓长连接,就是SP建立同ISMG连接,然后不断将数据包(一个个CMPP消息)发送到ISMG,此处发送不必等待某条消息的ISMG回应消息返回,就接着发送下一个消息。同时,等待ISMG返回信息或者等待ISMG发送给SP的消息。发送同接收消息不是一定要同步的,实际采用异步(同时也时双工)模式。从效率上,显然,必须全双工的异步模式才能够满足实际应用需求。

如下图(摘自CMPP2.0官方文档)所示,演示了长连接模式数据传输过程:

 

 

 

 

 

 

 


三、SP端开发

1.         消息分类

首先,图中的CMPP消息有很多种,SPISMG之间交流这些消息。大体上这些消息发出后,对方往往需要回复一个应答(RESP)类消息。注意,这些消息大多具有方向性,也就是说只能够从一端到另一端,而不可反方向进行,有些(少数)则可两端都能够发出。以下信息主要来源于移动的文档,但针对大家易混淆或源文档解释不够详细做了明确和补充。具体见下表:

       消息名

传递方向

解释说明

CMPP­_CONNECT

SP---àISMG

CMPP_CONNECT操作的目的是SPISMG注册作为一个合法SP身份,此消息需要向ISMG发出验证信息,验证方式采用md5加密密码方式,若注册成功后即建立了应用层的连接(否则ISMG会立即断开Socket),此后SP可以通过此ISMG接收和发送短信。

ISMGCMPP_CONNECT_RESP消息响应SP的请求。具体的算法实现参考CMPP2.0文档和本文附件代码。

CMPP_CONNECT_RESP

SPß---ISMG

ISMGCMPP_CONNECT消息的回复(无论是否验证成功);如果未通过,会在消息中包含参考信息,但ISMG会立即断开连接。

CMPP­_ACTIVE_TEST

SPßàISMG

这个消息通信双方都可以发出,目的是在没有其他消息发送时,保持双方的通信链路的连接,避免系统认为通信通道已经关闭。每一个收到此消息的实体应当返回CMPP_ACTIVE_TEST_RESP消息,以“礼节性”表示自己的还在通信,维持数据连接有效性。

不过,据网友交流,有些厂家实现的ISMG,仅仅靠自己发出此消息等待SP回答CMPP_ACTIVE_TEST_RESP来确定数据链路的有效性,而忽略SPCMPP_ACTIVE_TEST消息(有些霸道吧?)这个值得注意,不要仅仅实现发送而不响应此消息,避免数据连接失效。

CMPP_ACTIVE_TEST_RESP

SPßàISMG

对通信的另一端的CMPP_ACTIVE_TEST消息的回复。作用参考CMPP_ACTIVE_TEST的解释。

CMPP­_SUBMIT

SP---àISMG

在正确建立了数据连接后,SPISMG发送一个SMS数据包。本消息需要仔细研究。接收到此消息后,ISMG需要以CMPP_SUBMIT_RESP消息作为回答。如果在一定时间时间内(移动给出的参考值60秒)内未得到消息回应,那么SP需要重新发送此数据包,以确保消息得到投递。如果重发达到3次后仍然得不到回应,SP端应该考虑可能ISMG已经失效,应当停止发送此短消息。

CMPP­_SUBMIT_RESP

SPß---ISMG

该消息由ISMG发送给SP,同时返回一个“收条”(CMPP_SUBMIT消息的ISMG端的标示MSGID)SP,表示“我ISMG已经确认收到你这条消息了”。收到此消息后,SP需要保留此“收条”,因为后面ISMG会最终报告本消息是否正确发送到用户手机。那个报告就是以此消息的“收条”作为确认那一条消息的。

CMPP_QUERY

SP---àISMG

这个查询不是查询单条消息的,是查询SP发送给ISMG的短信的业务情况。可以查总计数,还可以分类查询。(基本就是发起对移动sms业务数据库的查询统计)

CMPP_QUERY_RESP

SPß---ISMG

ISMG将查询的数据返回给SP

CMPP_CANCEL

SP---àISMG

SP发起的取消某条消息的命令消息,其中包含了之前已经发送给ISMG消息的“收条”以便ISMG可以确定是那一条消息。如果消息已经发送给用户了,那么此消息/命令会无效,ISMG返回失败。

CMPP_CANCEL_RES

SPß---ISMG

ISMG返回的对CMPP_CANCEL的回复,并告知是否删除成功。

CMPP_DELIVER

SPß---ISMG

当有MO或者状态报告时,ISMG发送此消息。注意,此消息的数据可以是用户手机发送给SP的消息,也可是对于之前SP发送到ISMG的短信的最终状态的回复,报告短信的最终状态。

CMPP_DELIVER_RESP

SP---àISMG

SP礼节性的回复告知收到CM

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值