各位兄弟,你们好啊!我现在在跟移动调试通过smpp协议来收发短消息,但是我不知道为什么我总是无法登录smpp服务器,难道我的调用问题?

{
     m_SocketRec 已connect成功!     // str_to_smsc 我的登陆信息 根据smpp协议写的
     int len = send(m_SocketRec, str_to_smsc, sizeof(SMPP_BIND_MSG)str_len, 0);
     len = recv( m_SocketRec,str_from_smsc,sizeof(SMPP_BIND_RESP_BODY),0);
}我现在很奇怪,我发送能成功,但是我就是无法收到从smsc发过来的消息
这是为什么?

解决方案 »

  1.   

    bool  CVas::SM_Login(void)
    {
    char str_to_smsc[200],str_from_smsc[200];
      SMPP_BIND_MSG *smpp_MSG;

    // 系统初始化 
    smpp_MSG = new SMPP_BIND_MSG;
    memset(smpp_MSG,0,sizeof(SMPP_BIND_MSG));
    memset(str_to_smsc,0,200 );
    memset(str_from_smsc,0,200 ); if(!Connect())
    return false;

    /**************************************************/
    // 绑定smpp协议内容 smpp_MSG->Head.CommandId=1;
    smpp_MSG->Head.CommandLength =sizeof(SMPP_BIND_MSG);
    smpp_MSG->Head.CommandStatus=0;
    smpp_MSG->Head.SequenceNo=102;
    strcpy(smpp_MSG->Body.SystemId,"tongda");
    strcpy(smpp_MSG->Body.Password,"tongda");
    smpp_MSG->Body.SystemType[0]=0;
    smpp_MSG->Body.Ton=0;
    smpp_MSG->Body.Npi=1;
    smpp_MSG->Body.InterfaceVersion=1;
    memcpy(str_to_smsc,smpp_MSG, sizeof(SMPP_BIND_MSG)); /**************************************************/ int rval = send(m_SocketRec, str_to_smsc, sizeof(SMPP_BIND_MSG), 0);
    if(rval!=sizeof(SMPP_BIND_MSG))
    return false; do
    {
    memset(str_from_smsc,0,sizeof(str_from_smsc));
    if ( (rval=recv(m_SocketRec,str_from_smsc,sizeof(SMPP_BIND_RESP_BODY),MSG_PEEK))==-1 )
    return false;
    }while(rval>0); if(E_SUCCESS != GetPackageResult(str_from_smsc)  )
    return false;
    return true;
    }
      

  2.   

    typedef struct {
    int CommandLength;
    int CommandId;
    int CommandStatus;
    int SequenceNo;
    }SMPP_HEAD;
    typedef struct{
    char SystemId[SYSTEM_ID_LEN];
    char Password[PASSWORD_LEN];
    char SystemType[SYSTEM_TYPE_LEN];
    char InterfaceVersion;
    char Ton;
    char Npi;
    char AddressRange[ADDRESS_RANGE_LEN];
    }SMPP_BIND_BODY;typedef struct{
    SMPP_HEAD Head;
    SMPP_BIND_BODY Body;
    }SMPP_BIND_MSG;
    typedef struct{
    char SystemId[SYSTEM_ID_LEN];
    }SMPP_BIND_RESP_BODY;这是我的包结构
      

  3.   

    你咋没用htonl进行字节顺序转换呢,直接赋值拷贝好象不行吧。
      

  4.   

    另外,你发送成功也只是网关收到的包而已,但正确与否并没返回。
    还有,发送以后一般需要Sleep一点时间的。
      

  5.   

    我都连上去了,肯定没有问题
    Sleep 也没有用
    不是这个问题
      

  6.   

    所以我就想问问做过smpp短消息服务的高手,看看我的问题出在什么地方?
      

  7.   

    我刚才的意思是我的连接肯定上去了,发也没有问题,至于组包我是按smpp协议来的
    就是无法接收