协议开发 中移动CMPP2.0协议API(四)

本文详细介绍了CMPP协议中的链路检测机制及其实现方式,并提供了短信API开发的具体步骤与接口定义,帮助开发者快速掌握短信接口的使用。
 

接上篇:

 

八、链路检测

        根据CMPP协议当链路检测包发出超过时间T后未收到响应,应立即再发送链路检测包,再连续发送N-1次后仍未得到响应则断开此连接,并根据需要重新建立链接(T=60秒,N=3)。但也可以加快链路检测的速度;这个并不影响API的正常运行:

       

        在线程中添加一个检测的事件,当检测到要发送链路检测时,触发链路检测线程:

               //要链路检测测试( 链路是每30秒发送一次数据 )

        if( _pscoket->_needacttest > 0 || _pscoket->_lastacttime <= ( time( NULL ) - 30 ))

        {

            _pscoket->_lastacttime = time( NULL ) + 1 ;

            SetEvent( _pscoket->_hevnt_acti ) ;

        }

 

               //链路检测线程部分代码:

if( WaitForSingleObject( _pscoket->_hevnt_acti, _pscoket->_dwmsec ) == WAIT_OBJECT_0 )

        {

            try

            {

                err = _pscoket->_ActiveTest() ;

            }

            catch( ... )

            {

}

 

//根据发送链路检测结果来作进一步动作

if( err != 0 )

{

//重发可断开链接,重新初始SOCKET接口等

………….

           }

 

致此,我基本上已把整个CMPP协议的开发过程写完,中间还附带了部分代码,希望对大家有所帮助,如果有什么不明的也可以直接写邮件到我的邮箱           jimzj@21cn.com,我将为你解答一些CMPP开发中的问题或者是计费拔测碰到的字段设置的问题(可以是移动梦网,联通在线或电信巨龙)。

 

九、短信二次开发

 

另外对于没有申请到移动或联通短信接口的用户,可以通过提供的一套

API接口,可以快速的通过此API接口发送短信息:开发包包括以下内容:

50、文件说明

目录名

子目录名

文件名

功能说明

BGAPI

Exam_BC

 

BCB例程

Exam_VC

 

VC例程

 

FuncDef.cpp

动态库调用cpp文件

 

FuncDef.h

动态库调用h文件

 

BGAPI.Dll

动态库

 

短信API客户端开发使用说明.doc

说明文档

大家如果要下载这个开发包,可以到www.ebase168.com上的短信快车主页面中的二次开发就可以下载,测试。所附带的两个例程中已有登录用户的企业名称和密码,通过这个API用户还可以自已做一个企业服务器,再下带10万个客户端,这样去开发自己的客户群。

 

开发所要的几个接口的定义:

51初始化API函数

函数名:_IFInitInterface()

功能:完成初始化的工作;

1)、系统资源的初始化:系统资源的创建和设置;定时资源的设置;通信消息机制的设置;内存管理的初始化设置;

2)、通信参数初始化:包括服务器端IP地址;客户端器端IP地址;通信端口号;

3)、尝试连接;

返回: 0 成功

       1 参数 fCltDeliver 不能为空

       2 参数 fCltSmsStatus 不能为空

       3 初始化异常

       99 系统错误

说明:

参数中的所要的回调函数用于在接收到中心服务器下发的短信或短信状态是调用,用户应在接收到后,把信息保存后尽快返回一个0表示成功接收到短信或状态,不要在回调函数中直接处理信息或状态,以免影响接收的速度;回调函数的定义请参见FuncDef.h中的定义;

 

52登录注册函数

函数名:_Login()

功能:完成向中心服务器注册的工作;

1)、检测用户参数是否正确;

2)、向中心服务器发出一个注册指令;

返回: 0 登录已提交

       1 未初始化

       2 企业代码 <= 0

3 用户名称 <= 0

 

53短信提交

函数名:_Submit()

功能:向中心服务器提交一条短信息;

1)、检测用户提交的参数是否正确;

2)、向中心服务器发出短信提交指令;

说明:

返回: 0 提交成功

       1 未初始化

       2 未注册

       3 注册接收地址有误

       4 原始编码 <= 0

       5 源地址含有非法字符(只能空或数字)

       6 源地址长度 > 5

       7 目标地址含有非法字符(只能数字)

       8 目标地址 < 11

       9 编码 < 0

       10 数据长度 <= 0

       11 中文 > 65个字符 英文 > 130个字符

       12 流量限制 <= 100/

 13发送失败

 

57接收短信息回调函数

函数名:TProcGetDeliver()

功能:用来接收中心服务器下发的短信;

1)、接收短信息;

返回: 0 客户端成功接收

    

说明:

       回调函数用于在接收到中心服务器下发的短信,用户应在接收到后,把信息保存后尽快返回一个0表示成功接收到短信,不要在回调函数中直接处理信息,以免影响接收的速度;回调函数的定义请参见FuncDef.h中的定义;

 

58接收短信状态回调函数

函数名:TProcGetSmsStatus()

功能:用来接收中心服务器下发的状态;

1)、接收注册回应;

2)、接收通讯测试状态

3)、接收提交短信返回状态

4)、接收短信回应状态

返回: 0 客户端成功接收

    

说明:

       回调函数用于在接收到中心服务器下发的状态,用户应在接收到后,把信息保存后尽快返回一个0表示成功接收到状态,不要在回调函数中直接处理信息,以免影响接收的速度;回调函数的定义请参见FuncDef.h中的定义;

1) 可以在一台机器上运行多个服务吗?,会不会很麻烦? 当然,运行多个服务,节省硬件成本是这个系统的目标。 不麻烦,你只需要有中国移动发给你的一些参数,用一个命令就可以初始化一个实例,然后你就可以使用命令来直接启动和停止这个服务。 2) 如何保证性能? 谈到性能,主要是数据库的数据存取。 我已经很仔细地考虑过数据库的存取速度,据此做了一些性能上的优化,但是如果你的上层应用如果有着特殊的存取要求,请在此数据表上加索引,或者联系作者给你解决问题。 其他方面的性能主要是决定于你的物理主机。 3) 到底可以支持多找个服务在同一台主机上运行? 如果你得到的版本没有限制,那么唯一限制你的是你的主机物理参数了。最主要的是CPU和MEM。建议关注主机的CPU和MEM占用率,如果压力很大,请增强硬件。 4) 这个服务支持CMPP的什么版本? 服务器可以设置,可以设置成支持CMPP2.0CMPP3.0,和自动三种方式。 虽然说CMPP3指定10年了,但是中国移动现在大量地使用CMPP2的网关,所以你需要CMPP2才能和中国移动对接。 如果设置成自动,需要上一级网关支持。CMPP协议是设置成可以支持的,但是有的中国移动的网关不支持。 5) 如何发送短信,以及查阅收到的短信? 直接往cmpp_submit表格填入数据即可,如何有大量的数据,也可以直接导入。但必须确认其中的stat值必须为0,计费等值是你的上级网关认可的,否则对方会拒绝接受。 6) 如何知道短信发送成功? 发送表的Stat=0表示还没有发送,stat=1的时候开始发送,stat=2时候对方已经确认收到,这个时候需要查阅RespStat的值,如果是0,则发送成功。否则用这个值去错误表查询才能了解发送不成功的原因,这个原因是中国移动定义的。 7) 如何确认收到报告? 如果发送的时候要求收到报告,则收到报告时stat=3,这个时候请查阅ReportStat的值,如果为0,则送达,其他的值查阅关于reportStat的值 最终是否收到已经何时才能收到是上级网关决定的。 8) 为什么发送短信的时候没有签名呢,明明我填写了签名的呀? 在湖北移动,上级网关对SP发送的短信会强制加一个签名,这样就不必增加签名了。但是签名的内容必须计算在内。 如果你的上级网关不加签名,而你需要增加签名的话,请将配置“签名短信”设为“YES”即可。(V1.3) 9) 为什么签名会影响短信发送条数? 只要是设置了签名短信为是,或上级网关。那么签名会计算在短信长度在内,当然会影响短信发送条数。 10) 如何拆分短信?拆分短信后的签名是怎么处理的? 只要你发送的短信有一个中文字符,不管是短信内容,还是签名内容。那么整个短信作为中文来发送,否则作为英文来发送。 发送中文短信的时候,不管是汉字,还是中间的英文字符,都会作为一个字来统计,如果不满70字,就是一条,否则就拆分,拆分后每条可以发送67个字。 发送英文每次可以发送140字,如果拆分,拆分后每次只能发送134字。 11) 可以控制短信发送的速度吗? 不能完全控制,因为要受到上一级网关的影响。在上级网关的范围内才可以设置快一点或者慢一点。所以“发送速度”是一个参考值。 12) 我怎么知道每条发送的时间? 查阅submit表可以查到。 13) 有的短信可以发送成功,但是为什么有的发送失败,查阅到返回码为9? 中国一定对每一个SP的权限做了限制,如果发送有一条成功,那么就说明设置没有问题了。 发送失败可以在RespStat查到返回码。例如返回码为9,查阅到是“本网关不负责服务此计费号码”,这个号码是外省的号码,而你的SP权限是不能发送这个号码的。 具体代码请向你的上一级网关查询。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值