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

📄 main.pas

📁 华为cmpp协议短信网关Delphi源码
💻 PAS
字号:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, xy, ScktComp, ComCtrls, StdCtrls,winsock;
type

  TForm1 = class(TForm)
    Memo1: TMemo;
    ServerSocket1: TServerSocket;
    StatusBar1: TStatusBar;
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientError(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
    SPNumber,Dbname,username,pwd,TempStr:String;
    HostPort:integer;
    disptext:string;
    DBthreads,UPthreads:integer;     //收到短信线程计数器和回复状态未发送的短信线程计数器
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm}

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
  type
    SendPack = packed record
      head:  SGIPHead;
      resp:  Bind_Resp;
    end;
  var
    ReHead:SGIPHead;
    sresp:Bind_Resp;
    ReBind:xBind;
    ReDeliver:XDeliver;
    ReReport:XReport;
    i1:integer;
    S_Number1,S_Number2,S_Number3:longword;
    s_Pack:SendPack;
    S_SequenceNumber:String;
begin
  application.ProcessMessages;
  TempStr:='';
  fillchar(sresp,sizeof(sresp),0);
  fillchar(ReHead,sizeof(ReHead),0);
  i1:=Socket.ReceiveBuf(ReHead,sizeof(ReHead));
  if i1<>sizeof(ReHead) then
    exit;
  S_Number1:=ReHead.SNumber1;
  S_Number2:=ReHead.SNumber2;
  S_Number3:=ReHead.SNumber3;
  ReHead.MessageLength:=ntohl(ReHead.MessageLength);
  ReHead.CommandId:=ntohl(ReHead.CommandId);
  ReHead.SNumber1:=ntohl(ReHead.SNumber1);
  ReHead.SNumber2:=ntohl(ReHead.SNumber2);
  ReHead.SNumber3:=ntohl(ReHead.SNumber3);
  StatusBar1.Panels[0].Text:='接收到短信' ;
  if ReHead.CommandId=SGIP_UNBIND then           //SMG向SP发起UNBind
  begin            //断开连接
    application.ProcessMessages;
    FillChar(ReHead,SizeOf(ReHead),0);
    ReHead.MessageLength:=htonl(SizeOf(ReHead));
    ReHead.CommandId:=htonl(SGIP_UNBIND_RESP);
    ReHead.SNumber1:=S_Number1;
    ReHead.SNumber2:=S_Number2;
    ReHead.SNumber3:=S_Number3;
    i1:=socket.SendBuf(ReHead,sizeof(ReHead));
    if i1<>sizeof(ReHead) then
    begin
      memo1.Lines.Add('发送SGIP_UNBIND_RESP包出错');
      exit;
    end
    else
     memo1.Lines.Add('发送SGIP_UNBIND_RESP包成功,退出');
  end
  else if ReHead.CommandId=SGIP_BIND then        //SMG向SP发起BIND
  begin          
    FillChar(s_Pack,SizeOf(s_Pack),0);
    FillChar(ReBind,SizeOf(ReBind),0);
    socket.ReceiveBuf(ReBind,SizeOf(ReBind));
    s_Pack.head.MessageLength:=htonl(SizeOf(s_Pack));
    s_Pack.head.CommandId:=htonl(SGIP_BIND_RESP);
    s_Pack.head.SNumber1:=S_Number1;
    s_Pack.head.SNumber2:=S_Number2;
    s_Pack.head.SNumber3:=S_Number3;
    s_Pack.resp.Result:=0;
    i1:=socket.SendBuf(s_Pack,SizeOf(s_Pack));
    if i1<>SizeOf(s_Pack) then
    begin
      memo1.Lines.Add('发送SGIP_BIND_RESP 出错!');
      exit;
    end
    else
      memo1.Lines.Add('发送SGIP_BIND_RESP 成功');
  end
  else if ReHead.CommandId=SGIP_DELIVER then        //SMG向SP发送一条MO信息,****接收到用户的短信息****
  begin
    FillChar(s_Pack,SizeOf(s_Pack),0);
    FillChar(ReDeliver,SizeOf(ReDeliver),0);
    Socket.ReceiveBuf(ReDeliver,SizeOf(ReDeliver));
    s_Pack.head.MessageLength:=htonl(SizeOf(s_Pack));
    s_Pack.head.CommandId:=htonl(SGIP_DELIVER_RESP);
    s_Pack.head.SNumber1:=S_Number1;
    s_Pack.head.SNumber2:=S_Number2;
    s_Pack.head.SNumber3:=S_Number3;
    s_Pack.resp.Result:=0;
    memo1.Lines.Add('ReDeliver..........................................');
    if socket.SendBuf(s_Pack,SizeOf(s_Pack)) <>SizeOf(s_Pack) then
    begin
      memo1.Lines.Add('发送SGIP_DELIVER_RESP 出错');
      exit;
    end
    else
      memo1.Lines.Add('发送SGIP_DELIVER_RESP 成功');
    if ReDeliver.SPNumber=SPNumber then
    begin
      memo1.Lines.Add('收到短信线程');
      //处理短信线程
      application.ProcessMessages;
    end
    else
    begin
      memo1.Lines.Add(datetimetostr(now)+',receiveErr,手机号:'+ReDeliver.UserNumber+',内容:'+ReDeliver.MessageContent+',接收号:'+ReDeliver.SPNumber+',SPNumber错误');
      application.ProcessMessages;
    end;
  end
  else  if ReHead.CommandId=SGIP_REPORT then    //SMG向SP发送一条发送短信的回报 (MT回报)
  begin
    FillChar(s_Pack,SizeOf(s_Pack),0);
    FillChar(ReReport,SizeOf(ReReport),0);
    Socket.ReceiveBuf(ReReport,SizeOf(ReReport));
    s_Pack.head.MessageLength:=htonl(SizeOf(s_Pack));
    s_Pack.head.CommandId:=htonl(SGIP_REPORT_RESP);
    s_Pack.head.SNumber1:=S_Number1;
    s_Pack.head.SNumber2:=S_Number2;
    s_Pack.head.SNumber3:=S_Number3;
    s_Pack.resp.Result:=0;
    if socket.SendBuf(s_Pack,SizeOf(s_Pack))<> SizeOf(s_Pack) then
    begin
      memo1.Lines.Add('发送SGIP_REPORT 出错');
      exit;
    end
    else
    begin
      memo1.Lines.Add('发送SGIP_REPORT 成功');
    end;

    //跟据包头ID将数据库对应记录标志置为未发
    if ReReport.State=2 then
    begin
      memo1.Lines.Add('发送未成功短信更新线程');
      //处理发送未成功的线程
      application.ProcessMessages;
    end
    else
    Begin       //0,发送成功,1,等待发送,都认为是发送成功
      memo1.Lines.Add(datetimetostr(now)+',Report,SubmitSequenceNumber:'+S_SequenceNumber+',mobileNumber:'+ReReport.userNumber+',SendSucc,发送成功');
    end;
  end;
end;

procedure TForm1.ServerSocket1ClientError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
var
  errorMsg:string;
begin
  case ErrorEvent of
    eeGeneral:    errorMsg:='eeGeneral';
    eeSend:	  errorMsg:='eeSend';
    eeReceive:    errorMsg:='eeReceive';
    eeConnect:    errorMsg:='eeConnect';
    eeDisconnect: errorMsg:='eeDisconnect';
    eeAccept:     errorMsg:='eeAccept';
  end;
  ErrorCode:=0;
  Memo1.Lines.Add('Socket Error:'+errorMsg);
end;
end.

⌨️ 快捷键说明

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