`
逆风的香1314
  • 浏览: 1436790 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多
 

接上篇...

五、发送接口<!----><o:p></o:p>

对于API来说,最重要的一部分就是去做发送数据了。通过SOCKET套接字与网关相连接后,将自己的数据发送出去。

在发送数据前,组装好要发送的数据包,将数据COPY一份到发送窗口,对于不要回应的数据包,只要发送成功,就可以退出发送进程。对于要等待回应的包,启动一个时钟来作为检测是否收到了回应,并返回结果给发送窗口。设置发送的次数标志,如果发送第一次超时,按设定的发送次数,再发送。如果出现一次发送不成功,可以设置一个标志位,去发送一次链路检测标志,如果链路检测失败,应该重新连接或者是在用户发送时直接返回链路断开的结果。

 <o:p></o:p>

CMPP_PACKAGE * _pkg = ( CMPP_PACKAGE * )buf ;

    int err = API_E_UNKNOW_ERR ;

    if( _soc == INVALID_SOCKET ) return API_E_INVALT_SOC ;

    while( _pkg->n > 0 )

    {

        _pkg->n = _pkg->n - 1 ;   //发送次数

        _lastacttime = time( NULL ) ;

 <o:p></o:p>

        EnterCriticalSection( &_csec_soc ) ;

        try

        {

            err = send( _soc, buf, len, 0 ) ;

        }

        catch( ... )

        {

        }

        LeaveCriticalSection( &_csec_soc ) ;

 <o:p></o:p>

        if( err < len ) //发送不成功

        {

            err = API_E_SO_SENDERR ;

            continue ;

        }

 <o:p></o:p>

        //不要回应结果的直接跳出

        if( _pkg->resp == false )

        {

            err = 0 ;

            break ;

        }

 <o:p></o:p>

        //等待回应事件

        …………

    }

    //如果发送超时,设置发送链路检测标志开

    if( err == API_E_SO_OVETIME )

    {

        _needacttest = _needacttest + 1 ;

    }

       return err;

 <o:p></o:p>

六、接收接口<o:p></o:p>

        对于数据的接收,因为发送短信的接口的数据量并不是很大,所以可以采用接收到

一部分,解释一部分的功能,这样的就可以减少设计上的难度,当然也可以一次接收缓冲中的数据,再一段段去分析,也不是很难。

        对于接收,启用一个新的线程,这样也可以保证接收的及时性与可调度性。先接收包头信息确定整个数据包的长度,直到接收到一个完整的包的内容才进行下一个包的接收,有些包也可能是没有包体结构的,所以也可以在收到正确的包头后就进行分析结构如下:

 <o:p></o:p>

        //先接收包头部分,以确定包的大小、类型

        err = _pscoket->_recv( _pscoket->_rec_window, sizeof( CMPP_HEAD )) ;

        if( err == SOCKET_ERROR || err == API_E_INVALT_SOC ) continue ;

 <o:p></o:p>

        CMPP_PACKAGE * _recpkg = ( CMPP_PACKAGE * )_pscoket->_rec_window ;

        if( ntohl( _recpkg->head.size ) > 0 )

        {

            //接收包体

            _reclen = 0 ;   //已接收长度

            _recdatalen = ntohl( _recpkg->head.size ) - sizeof( _recpkg->head ) ;

            do

            {

                Sleep( 1 ) ;

                _recdatalen = _recdatalen - _reclen ;

                err = _pscoket->_recv( _recpkg->data + _reclen, _recdatalen );

                if( err == SOCKET_ERROR || err == API_E_INVALT_SOC ) continue ;

                _reclen = err ;

            } while( _recdatalen - _reclen > 0 ) ;

            if( _recdatalen > _reclen ) continue ;

        }

        try

        {

            _pscoket->_analysisrecpack( _recpkg ) ;  //分析包的内容

        }

        catch( ... )

        {

        }

 <o:p></o:p>

 <o:p></o:p>

七、分析协议包<o:p></o:p>

接收到CMPP的一个完整的协议包后,根据命令字去作分析,相对来说并不是一个很难的事情,不过要注意是就是要把网络数据流转化为主机数据流这个问题。

unsigned char _result = 0 ;

    CMPP_DELIVER * _msg = ( CMPP_DELIVER * )_recpkg->data ;

    DELIVER_CONTENT * _pcont = ( DELIVER_CONTENT *)_msg->msgcontent ;

 <o:p></o:p>

    if( _msg->msglen <= 0 )

    {

        _result = 4 ; //接收到的长度前误,要求网关服务器重发这个包

    }

    else if( _msg->msglen > 200 )

    {

        _result = 6 ; //接收到的长度前误,要求网关服务器重发这个包

    }

    else if( _msg->delivery = 0 || _msg->delivery =  1 )

    {

        _result = 1 ; //接收到的协议格式有误,要求网关服务器重发这个包

    }

 <o:p></o:p>

    //接收到错误的信息直接返回

    if( _result > 0 )

    {

        _deliverresp( _recpkg->head.seqid, _msg->msgid, _result ) ;

        return ;

    }

              

        if( _fCltGetDeliver )

{

//如果客户端程序采用的是回调函数来取得接收到的短信或状态,调用回

//调函数传递数据

……………

}

else

{

//如果客户端采用的是自已从队列中提取的方式,把数据直接PUSH到队//列中等待用户提取

………….

}

 待续.....

 <o:p></o:p>

分享到:
评论

相关推荐

    中国移动短信CMPP 2.0协议API

    中国移动短信CMPP 2.0协议API是一种专用于短信服务的通信协议,广泛应用于移动通信领域,特别是企业级应用,如验证码发送、信息推送等。该协议基于TCP/IP,为服务提供商提供了高效、稳定且安全的短信发送和接收功能...

    中国移动CMPP2.0短信接口开发

    总的来说,CMPP2.0短信接口开发涉及到网络编程、协议解析等多个技术领域,C#作为一种强大的.NET开发语言,提供了丰富的类库支持,使得开发者能够方便地实现与移动运营商的接口对接,实现高效、稳定的短信服务。

    中国移动短信网关模拟器支持cmpp2.0

    中国移动短信网关模拟器是为开发者和测试人员提供的一种工具,它能够模拟中国移动的CMPP2.0协议,用于测试和验证短信应用的正确性和效率。CMPP2.0(China Mobile Short Message Peer-to-Peer Protocol version 2.0)...

    CMPP 2.0 C# 源码

    CMPP(China Mobile Peer-to-Peer)是一种由中国移动制定的通信协议,主要用于短信服务,包括短信提交、查询、接收和报告等操作。CMPP 2.0是该协议的一个版本,它在CMPP 1.0的基础上进行了优化和增强,提高了系统的...

    使用mina框架实现cmpp2.0服务端

    3. **协议解析**:设计CMPP2.0协议的解码器(Decoder)和编码器(Encoder),将原始的字节流转换为业务对象,反之亦然。这通常涉及到对CMPP协议报文结构的深入理解,包括报文头、消息ID、业务类型等字段。 4. **...

    cmpp2.0模拟短信网关

    总的来说,这个“cmpp2.0模拟短信网关”是开发和测试短信服务功能的强大工具,通过它,开发者可以在本地环境中模拟真实的短信通信场景,进行功能验证和性能测试,从而提高应用的稳定性和用户体验。在使用过程中,...

    CMPP2.0实现

    包含接口API与测试工程: 主目录下是详细使用手册.接口文件放在API文件夹中. Demo Project中包含两个示例工程. 一个是模拟网关的源码--“CMPPGateway” 一个是SP连接网关的示例代码--“SPClient”

    中国移动通信CMPP2.0短消息网关开发接口使用手册

    **CMPP2.0(China Mobile Packet Protocol)**是中国移动制定的一套用于移动互联网短信业务的标准协议,旨在规范SP(Service Provider,服务提供商)与运营商之间短消息业务的交互流程。此手册详细介绍了一款基于...

    CMPP2.0、3.0网关以及蓝杰网关代码

    CMPP2.0和CMPP3.0是该协议的不同版本,分别对应不同的功能需求和性能优化。 CMPP2.0是早期的版本,它支持基本的短信业务,如点对点短信、群发短信、短信状态报告等。CMPP2.0协议主要由以下几个关键部分组成: 1. ...

    CMPP.rar_CSharp cmpp_cmpp_cmpp 2.0 C#_短信网关_网关

    CMPP(China Mobile Peer-to-Peer)协议是中国移动通信公司为SP(Service Provider)提供的一种基于TCP/IP协议的通信协议,用于实现SP与移动运营商之间的数据传输,主要包括短信、彩信、WAP Push等业务。C#是微软...

    CMPP2.0JAVA调用

    CMPP2.0是China Mobile Packet Protocol的2.0版本,是中国移动为了高效地处理大量短信业务而设计的一种协议。这个协议主要用于SP(Service Provider)与SMSC(Short Message Service Center,短信服务中心)之间的...

    中国移动短信网关cmpp 3.0 华为java api

    中国移动短信网关CMPP(China Mobile Packet Protocol)3.0是一种专用于移动通信领域的协议,主要用于短信服务,包括发送、接收、查询等操作。华为作为知名的电信设备供应商,提供了对应的Java API来帮助开发者便捷...

    cmpp2_cmpp2客户端和服务端测试工具_

    - 在开发过程中,通过这两个工具可以快速测试CMPP2协议的实现,避免因协议问题导致的短信发送失败或延迟。 - 进行压力测试:模拟大量并发请求,评估系统的承载能力和性能瓶颈。 - 故障排查:当短信服务出现问题时...

    cmpp短信网关协议Java版

    总之,这个Java版的CMPP2.0实现为开发者提供了一个快速接入中国移动短信服务的平台,通过理解并运用此项目,开发者可以深入理解短信网关协议的工作原理,并能有效地集成到自己的应用系统中,实现短信的发送和接收...

    CMPP API

    CMPP(China Mobile Short Message Peer-to-Peer Protocol)是中国移动制定的一种高效、可靠的点对点短消息传输协议,它分为CMPP2.0和CMPP3.0两个版本,分别对应不同的功能需求和性能优化。 在描述中提到,该API...

    移动企信通客户端cmpp2

    在这个项目中,开发者使用C#语言实现了CMPP2.0协议的客户端,使得开发者可以通过编程接口(API)方便地向中国移动的短信网关发送和接收短信。这个客户端可能包含以下关键组件: 1. **连接管理模块**:负责建立和...

    CMPP SMGP SGIP短信应用平台 v2.0

    在这个短信应用平台中,C#开发者已经为SGIP协议提供了相应的API接口,使得开发人员能够轻松地进行短信的收发操作。 在提供的压缩包文件中,"sms_gate.rar"可能包含了整个短信网关的核心代码,包括对CMPP、SMGP和...

    CMPP.rar_cmpp_cmpp接口

    在这个项目中,开发者使用VC6.0来实现CMPP2.0协议,创建了一个接口,使得SP可以通过这个接口与移动运营商的短消息网关进行交互,简化了接入过程,减少了开发的复杂性。 在提供的压缩包文件中,我们可以找到以下几个...

    CMPP20模拟网关

    1. **协议仿真**:CMPP20模拟网关能够精确地模拟中国移动的CMPP2.0服务器行为,包括连接管理、消息传输、错误处理等,帮助开发者在本地环境中进行功能测试和性能优化。 2. **消息模拟**:支持发送和接收各种CMPP2.0...

    中国移动通信CMPP3.0短消息网关开发接口库 4.0

    CMPP(China Mobile Peer-to-Peer)3.0协议是CMPP2.0的升级版,主要改进了协议的安全性、可靠性和效率。该协议定义了SP(Service Provider,服务提供商)与SCP(Service Control Point,服务控制点)之间的接口,...

Global site tag (gtag.js) - Google Analytics