⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.~pas

📁 delphi版cmpp网关
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
        strpcopy(LinkID,'');//点播业务使用的LinkID,非点播类业务的MT流程不使用该字段。
        //Reserve             :array[0..7] of char;//保留
    end;
    bCmpp_Submit( ClientSocket1.Socket, CMPP_SUBMIT_tag );
end;

procedure bCmpp_Terminate( cSocket: TCustomWinSocket );
type
        T_init = packed record
        head: TCMPP_HEAD_tag;
        body: TCMPP_CONNECT_tag;
    end;
var
    bInit: T_init;
    int1, int2, int3: integer;

begin

   // try
        int1 := SizeOf( TCMPP_HEAD_tag );
        int2 := SizeOf( TCMPP_TERMINATE_tag );
        int3 := int1 + int2;
        FillChar( bInit.head, int1, 0 );
        FillChar( bInit.body, int2, 0 );
        bInit.head.Total_Length := htonl( int3 );
        bInit.head.Command_ID := htonl( CMPP_TERMINATE );
        bInit.head.Sequence_ID := htonl( 1 );
        if cSocket.SendBuf( bInit, int3 ) <> int3 then
        begin
            //main.memo1.Lines.Add( '发送连接操作失败' );
            exit;
        end;
        //memo1.Lines.Add( '发送连接操作成功,正等待响应消息' );
   { except
        on e: exception do
            memo1.Lines.Add( '发送连接操作失败,错误信息' + e.Message );
    end; //try-except }
end;

procedure TFrmMain.ClientSocket1Read( Sender: TObject;
    Socket: TCustomWinSocket );
var
    ReadBufSize: shortint;
    CMPP_HEAD_tag: tCMPP_HEAD_tag;
    //ttlen:integer;
    //BUFFER:ARRAY[0..255]   OF   CHAR;
    //HCommand_Id:longword;
begin
    try
        FillChar( CMPP_HEAD_tag, sizeof( tCMPP_HEAD_tag ), 0 );
        ReadBufSize := Socket.ReceiveBuf( CMPP_HEAD_tag, sizeof( tCMPP_HEAD_tag ) );
          //ReadBufSize := Socket.ReceiveBuf( CMPP_HEAD_tag, 33 );
          //showmessage('Total_Length is ' +inttostr(ntohl(cmpp_head_tag.Total_Length)));
          //HCommand_Id:=ntohl(cmpp_head_tag.Command_Id);
          //showmessage('Command_Id is '+inttostr(HCommand_Id));
          //showmessage('Sequence_Id is '+inttostr(ntohl(cmpp_head_tag.Sequence_Id)));

        //showmessage('readbufer大小'+inttostr(readbufSize));
        //showmessage('tCMPP_HEAD_tag 大小'+inttostr(sizeof( tCMPP_HEAD_tag ) ));
         //memo1.Lines.Add('tCMPP_HEAD_tag 大小'+inttostr(sizeof( tCMPP_HEAD_tag ) ));
        if ( ReadBufSize = 0 ) or ( ReadBufSize = -1 )  or ( ReadBufSize <> SizeOf( tCMPP_HEAD_tag ) )  then
            //memo1.Lines.Add('消息头长度不正确!');
            exit;

        CMPP_HEAD_tag.Command_Id := ntohl(cmpp_head_tag.Command_Id); //转换为十进制的Command_ID
        //CMPP_HEAD_tag.Total_Length:=ntohl(CMPP_HEAD_tag.Total_Length);
        //showmessage(intTostr(CMPP_HEAD_tag.Command_Id));

        if CMPP_HEAD_tag.Command_Id = CMPP_CONNECT then //ISMG对SP发起的连接请求
            CmppRead_CONNECT( Socket, CMPP_HEAD_tag );

        if CMPP_HEAD_tag.Command_Id = CMPP_CONNECT_RESP then
            CmppRead_CONNECT_RESP( Socket, CMPP_HEAD_tag );

        if CMPP_HEAD_tag.Command_Id = CMPP_TERMINATE then //短信中心发起的断开连接操作
            CmppRead_TERMINATE( Socket, CMPP_HEAD_tag );

        if CMPP_HEAD_tag.Command_Id = CMPP_TERMINATE_RESP then
            memo1.Lines.Add('断开与短信网关的连接');

        if CMPP_HEAD_tag.Command_Id = CMPP_DELIVER then
            CmppRead_DELIVER( Socket, CMPP_HEAD_tag );

        if CMPP_HEAD_tag.Command_Id = CMPP_SUBMIT_RESP then
            CmppRead_SUBMIT_RESP( Socket, CMPP_HEAD_tag );

        {if CMPP_HEAD_tag.Command_Id = CMPP_ACTIVE_TEST then
            CmppRead_ACTIVE_TEST( Socket, CMPP_HEAD_tag );

        if CMPP_HEAD_tag.Command_Id = CMPP_ACTIVE_TEST_RESP then
            CmppRead_ACTIVE_TEST_RESP( Socket, CMPP_HEAD_tag ); }

    except

    end;
end;

procedure TFrmMain.CmppRead_CONNECT_RESP( ReadSock: TCustomWinSocket;
    Cmpp_Head: tCMPP_HEAD_tag );

    var CMPP_CONNECT_RESP_tag:TCMPP_CONNECT_RESP_tag;
    //Status:integer;

begin
     FillChar( CMPP_CONNECT_RESP_tag, SizeOf( CMPP_CONNECT_RESP_tag ), 0 );
    //showmessage('CMPP_CONNECT_RESP_tag 大小'+inttostr(sizeof(TCMPP_CONNECT_RESP_tag) ));
    //BufSize:=ReadSock.ReceiveBuf( CMPP_CONNECT_RESP_tag, SizeOf( CMPP_CONNECT_RESP_tag ) );
    // showmessage('readsiaze 大小'+inttostr(bufsize ));
    if ReadSock.ReceiveBuf( CMPP_CONNECT_RESP_tag, SizeOf( CMPP_CONNECT_RESP_tag ) )<> SizeOf( CMPP_CONNECT_RESP_tag ) then
     begin
        Showmessage('CMPP_CONNECT_RESP_tag 大小'+inttostr(SizeOf( CMPP_CONNECT_RESP_tag ) ));
        Memo1.Lines.Add('ReceiveBuf CMPP_CONNECT_RESP_tag Error');
        exit;
    end
    else
       CMPP_CONNECT_RESP_tag.Status:= ntohl(CMPP_CONNECT_RESP_tag.Status);
    if CMPP_CONNECT_RESP_tag.Status =ERR_CONNECT_SUCCESS then
       begin
        //Showmessage('CMPP_CONNECT_RESP_tag 大小'+inttostr(SizeOf( CMPP_CONNECT_RESP_tag ) ));
        Memo1.Lines.Add(timetostr(now)+'----->,认证成功,连接成功!');
        StatusBar1.SimpleText:='ok';
       end
    else if  CMPP_CONNECT_RESP_tag.Status =ERR_CONNECT_BODY then
        Memo1.Lines.Add(timetostr(now)+'----->连接失败,结构体错误!')
      else if  CMPP_CONNECT_RESP_tag.Status =ERR_CONNECT_INVALID_SP_ID then
        Memo1.Lines.Add(timetostr(now)+'----->连接错误,非法SP ID!')
    else if  CMPP_CONNECT_RESP_tag.Status =ERR_CONNECT_SP_AUTHENTICATION then
        Memo1.Lines.Add(timetostr(now)+'----->连接错误,SP认证错!')
    else if  CMPP_CONNECT_RESP_tag.Status =ERR_CONNECT_VERSION then
        Memo1.Lines.Add(timetostr(now)+'----->连接失败,版本太高!')
    else
        Memo1.Lines.Add(timetostr(now)+'----->连接失败,其它错误!');

end;

procedure TFrmMain.CmppRead_CONNECT( ReadSock: TCustomWinSocket;
    Cmpp_Head: tCMPP_HEAD_tag );
begin
//ISMG对SP发起的连接请求
end;

procedure TFrmMain.CmppRead_TERMINATE(ReadSock: TCustomWinSocket;  //短信中心发起的断开连接操作
  Cmpp_Head: tCMPP_HEAD_tag);
  var CMPP_TERMINATE_tag:TCMPP_TERMINATE_tag;
begin
    FillChar(CMPP_TERMINATE_tag, SizeOf(CMPP_TERMINATE_tag ), 0 );
    if ReadSock.ReceiveBuf( CMPP_TERMINATE_tag, SizeOf(CMPP_TERMINATE_tag ) )<> SizeOf( CMPP_TERMINATE_tag ) then
    begin
        Showmessage('CMPP_TERMINATE_tag 大小'+inttostr(SizeOf( CMPP_TERMINATE_tag ) ));
        Memo1.Lines.Add('ReceiveBuf CMPP_TERMINATE_tag Error');
        exit;
    end
    else
       begin
       clientsocket1.close;
       Memo1.Lines.Add(timetostr(now)+'----->,ISMG请求断开,连接关闭!');
       StatusBar1.SimpleText:='断开';
       end;
end;

procedure TFrmMain.CmppRead_DELIVER(ReadSock: TCustomWinSocket;
  Cmpp_Head: tCMPP_HEAD_tag);
var
    SizeI1, SizeI2: integer;
    bufferStr : array[0..199] of char;
    bufferSize: Integer;
    CMPP_DELIVER_HEAD_tag: tCMPP_DELIVER_HEAD_tag;
    Cmpp_Deliver_Resp_ItoS: tCmpp_Deliver_Resp_ItoS;
    CMPP_DELIVER_tag: tCMPP_DELIVER_tag;
begin
    SizeI1 := SizeOf(tCmpp_Deliver_Resp_ItoS);    //Cmpp_Deliver_Resp_ItoS
    SizeI2 := SizeOf(tCMPP_DELIVER_HEAD_tag);
    FillChar( Cmpp_Deliver_Resp_ItoS, SizeI1, 0 );
    FillChar( CMPP_DELIVER_HEAD_tag, SizeI2, 0 );
    FillChar( bufferStr, 200, 0 );
    ReadSock.ReceiveBuf(CMPP_DELIVER_HEAD_tag,SizeI2);
    if CMPP_DELIVER_HEAD_tag.Registered_Delivery = 0 then  //收到短信处理
    begin
        FillChar( CMPP_DELIVER_tag, SizeOf(tCMPP_DELIVER_tag), 0);
        bufferSize := CMPP_DELIVER_HEAD_tag.Msg_Length+8;
        if ReadSock.ReceiveBuf(bufferStr,bufferSize) <> bufferSize then
        begin
            memo1.Lines.Add('ReceiveBuf(bufferStr,bufferSize) error');
            exit;
        end;
        Move (bufferStr, CMPP_DELIVER_tag.Msg_Content, bufferSize-8);
        memo1.Lines.Add('收到短信,内容'+CMPP_DELIVER_tag.Msg_Content);
    end
    else if CMPP_DELIVER_HEAD_tag.Registered_Delivery = 1 then//返回状态报告处理
    begin
        bufferSize := CMPP_DELIVER_HEAD_tag.Msg_Length + 8;
        ReadSock.ReceiveBuf( bufferStr, bufferSize );
        memo1.Lines.Add('返回状态报告');
    end
    else
    begin
        //WriteLog.WriteExceptLog( IniBody.OtherLogFileName, DateTimeToStr(now) +
        //    '收到其它短信,Registered_Delivery=' + IntToStr( CMPP_DELIVER_HEAD_tag.Registered_Delivery ));            //memo1.Lines.Add('==============CMPP_CONNECT 发送返回包错误');
        //memo1.Lines.Add('收到其它类型短信');
    end;
    Cmpp_Deliver_Resp_ItoS.Head.Total_Length := htonl( 21 );
    Cmpp_Deliver_Resp_ItoS.Head.Command_Id := htonl(CMPP_DELIVER_RESP);
    Cmpp_Deliver_Resp_ItoS.Head.Sequence_Id := Cmpp_Head.Sequence_Id;
    Cmpp_Deliver_Resp_ItoS.Body.Msg_Id := CMPP_DELIVER_HEAD_tag.Msg_Id;
    Cmpp_Deliver_Resp_ItoS.Body.Result := 0;

end;


procedure TFrmMain.CmppRead_SUBMIT_RESP(ReadSock: TCustomWinSocket;
  Cmpp_Head: tCMPP_HEAD_tag);
var 
    SizeI1: integer;
    CMPP_SUBMIT_RESP_tag: tCMPP_SUBMIT_RESP_tag;
begin
    SizeI1 := SizeOf(CMPP_SUBMIT_RESP_tag);
    FillChar(CMPP_SUBMIT_RESP_tag, SizeI1, 0);
    if ReadSock.ReceiveBuf(CMPP_SUBMIT_RESP_tag, SizeI1) <> SizeI1 then
    begin
        Memo1.Lines.Add('接收短信发送的包体出错');
        exit;
    end;
end;


procedure TFrmMain.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  StatusBar1.SimpleText:='未连接';
end;

procedure TFrmMain.bTerminateClick(Sender: TObject);
begin
    bCmpp_Terminate( ClientSocket1.Socket);
end;


end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -