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

📄 spformunit.~pas

📁 短消息的实现参考
💻 ~PAS
字号:
unit SpFormUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp,CMPP20, ComCtrls;

type
  TSpForm = class(TForm)
    SpClientSocket: TClientSocket;
    StatusBar1: TStatusBar;
    procedure SpClientSocketConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure FormCreate(Sender: TObject);
    procedure SpClientSocketRead(Sender: TObject;
      Socket: TCustomWinSocket);
  private
    { Private declarations }
    sequence:Cardinal;
  public
    { Public declarations }
    msgh:MsgHeader;
    function GetSequence():Cardinal;
  end;

var
  SpForm: TSpForm;

const
  SP_ID='910007';

implementation

{$R *.dfm}

procedure TSpForm.SpClientSocketConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
  connect:CMPP_Connect;
  astr:String;
  msg_len:Cardinal;
begin
  statusbar1.Panels[0].Text:='已建立TCP连接';
  InitConnect(connect,SP_ID,CMPP_VERSION);
  astr:=StrConnect(connect);
  msg_len:=Length(astr)+12;
  InitMsgHeader(msgh,msg_len,Cmd_Connect,GetSequence);
  astr:=StrMsgHeader(msgh)+astr;
  SpClientSocket.Socket.SendText(astr);
end;

procedure TSpForm.FormCreate(Sender: TObject);
begin
  SpClientSocket.Open;
  sequence:=0;
end;

function TSpForm.GetSequence: Cardinal;
begin
  if sequence=High(sequence) then
    sequence:=0
  else
    sequence:=sequence+1;
  result:=sequence;
end;

procedure TSpForm.SpClientSocketRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  sub:CMPP_Submit;
  astr:String;
  msgh:MsgHeader;
  connect:CMPP_Connect;
  connect_resp:CMPP_Connect_RESP;
  sub_resp:CMPP_Submit_RESP;
  deliver:CMPP_Deliver;
  sub_statrep:CMPP_Submit_StatREP;
  deliver_resp:CMPP_Deliver_RESP;
  active_test_resp:CMPP_Active_Test_RESP;
  total_length:Cardinal;
begin
  astr:=socket.ReceiveText;
//for msgh
  msgh:=RecMsgHeader(Copy(astr,1,12));
  total_length:=msgh.Total_Length;
  case msgh.Command_Id of
    Cmd_Connect_RESP:
    begin
      connect_resp:=RecConnectRESP(Copy(astr,13,total_length-12));
      showmessage('CMPP_Connect_RESP!');
      showmessage('test='+IntToStr(connect_resp.Version));
    end;
    Cmd_Submit_RESP:
    begin
      sub_resp:=RecSubmitRESP(Copy(astr,13,total_length-12));
      showmessage('CMPP_Submit_RESP!');
      showmessage('Result='+IntToStr(sub_resp.Result));
    end;
    Cmd_Deliver:
    begin
      deliver:=RecDeliver(Copy(astr,13,total_length-12));
      showmessage('CMPP_Deliver!');
      if deliver.Registered_Delivery<>0 then
      begin
        sub_statrep:=RecSubmitStatREP(deliver.Msg_Content);
        showmessage(sub_statrep.Dest_Terminal_Id);
      end
      else
        showmessage(deliver.Msg_Content);
    end;
    Cmd_Active_Test:
    begin
      showmessage('CMPP_Active_Test');
    end;
    Cmd_Active_Test_RESP:
    begin
      active_test_resp:=RecActiveTestRESP(Copy(astr,13,total_length-12));
      showmessage('CMPP_Active_Test_RESP!');
      showmessage(IntToStr(active_test_resp.Reserved));
    end;
    else
      showmessage('Bad Command ID!');
  end;
end;

end.

⌨️ 快捷键说明

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