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

📄 demos.pas

📁 SPServer.rar一个基于TCP/IP监听发送代码
💻 PAS
字号:
unit Demos;

interface

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

//下发客户端返回机数据
type
 TResultServer = Record
  RecvType:byte;
  CommandID: array [0..14] of byte;
  Result:byte;
  Msg: array [0..160] of byte;
 end;

//下发客户端转发接收的数据
type
 TDeliverServer = Record
  RecvType:byte;
  SrcNo:array [0..21] of byte;
  Msg:array [0..160] of byte;
 end;

type TRec_Thread = class(TThread)
  protected
    procedure Execute; override;
    procedure recbuf;
  public
    constructor Create(CreateSuspended: Boolean);
end;

const
  h27 = 'SendSMS';
  h28 = 'SendBatchSMS';
  h01 = 'SecurityATT';  

function SendSMS(p_CommandID,p_DestNo,p_ChargeNo,p_SvcType,p_Content,p_SPNumber:PChar):Integer;stdcall;external 'SMSysDll32.dll';
function ConnectServer(IPAddress:PChar;HostPort:Integer):Integer;stdcall;external 'SMSysDll32.dll';
function DestrogSocket:Integer;stdcall;external 'SMSysDll32.dll';
function InitSocket:Integer;stdcall;external 'SMSysDll32.dll';
function RecvMsg(var buffer:array of Char):Integer;stdcall;external 'SMSysDll32.dll';
function DestroySocket:Integer;stdcall;external 'SMSysDll32.dll';
function IdenAttes(p_User,p_PassWord,p_CommandID:PChar):Integer;stdcall;external 'SMSysDll32.dll';

type
  TForm1 = class(TForm)
    str: TStatusBar;
    GroupBox2: TGroupBox;
    lIPAddress: TLabeledEdit;
    lUser: TLabeledEdit;
    lPassWord: TLabeledEdit;
    lHostPort: TLabeledEdit;
    GroupBox1: TGroupBox;
    lCommandID: TLabeledEdit;
    lDestNo: TLabeledEdit;
    lChargeNo: TLabeledEdit;
    lSvcType: TLabeledEdit;
    lContent: TLabeledEdit;
    Timer1: TTimer;
    GroupBox3: TGroupBox;
    Memo1: TMemo;
    Button3: TButton;
    Button4: TButton;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
   Rec_Thread  : TThread;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{当线程开始时,Execute方法将被调用。数据接收}
procedure TRec_Thread.Execute;
begin
  FreeOnTerminate := True;
  recbuf;
end;

constructor TRec_Thread.Create(CreateSuspended: Boolean);
begin
  FreeOnTerminate := True;
  inherited Create(CreateSuspended);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 pUser,pPassWord,pDestNo,pChargeNo,pSvcType,pContent:PChar;
 re:Integer;
begin
 pUser:=PChar(lUser.Text);
 pPassWord:=PChar(lPassWord.Text);
 pDestNo:=PChar(lDestNo.Text);
 pChargeNo:=PChar(lChargeNo.Text);
 pSvcType:=PChar(lSvcType.Text);
 pContent:=PChar(lContent.Text);
 re:=SendSMS(h27,pDestNo,pDestNo,pSvcType,pContent,'#0');
 case Re of
  1:str.Panels[1].Text:='信息发送成功!';
 -1:str.Panels[1].Text:='信息发送失败!';
 -2:str.Panels[1].Text:='未经过安全认证!';
 -3:str.Panels[1].Text:='读本地IP出错!';
 end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
 re:Integer;
 sIPAddress:string;
 iHostPort:Integer;
begin
sIPAddress:=lIPAddress.Text;
iHostPort:=StrToInt(lHostPort.Text);
re:=ConnectServer(PChar(sIPAddress),iHostPort);
case re of
  1:begin
     str.Panels[1].Text:='连接成功!';
     Timer1.Enabled:=True;
  end;
 -1:str.Panels[1].Text:='Socket创建失败!';
 -2:str.Panels[1].Text:='网络连接失败!';
 else str.Panels[1].Text:='网络故障!';
end;
end;

procedure TRec_Thread.recbuf;
var
 buffer:array[0..1024] of Char;
 rec:Integer;
 s:string;
 xResultServer:TResultServer;
 tmpbuf:array[0..255] of Char;
begin
 fillchar(xResultServer,SizeOf(xResultServer),' ');
 fillchar(tmpbuf,SizeOf(tmpbuf),' ');
 fillchar(buffer,sizeof(buffer),' ');
 rec:=RecvMsg(buffer);
 if Rec=-2 then
  begin
   form1.str.Panels[1].Text:='未经身份认证!';
   Exit;
  end;
 if rec>0 then
  begin
    Move(buffer,xResultServer,SizeOf(xResultServer));
    form1.Memo1.Lines.Add('标识号:'+IntToStr(xResultServer.RecvType));
    form1.Memo1.Lines.Add('');
    Move(xResultServer.CommandID,tmpbuf,SizeOf(xResultServer.CommandID));
    form1.Memo1.Lines.Add('命令吗:'+tmpbuf);
    form1.Memo1.Lines.Add('');
    if xResultServer.Result=1 then
    form1.Memo1.Lines.Add('命令执行成功') else
    form1.Memo1.Lines.Add('命令执行失败');
    form1.Memo1.Lines.Add('');
    Move(xResultServer.Msg,tmpbuf,SizeOf(xResultServer.Msg));
    form1.Memo1.Lines.Add('返回值:'+tmpbuf);
    form1.Memo1.Lines.Add('');
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 DestroySocket;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
if InitSocket>0 then
str.Panels[1].Text:='初始化成功!'
else str.Panels[1].Text:='初始化失败!';
end;

procedure TForm1.Button4Click(Sender: TObject);
var
 pUser,pPassWord:PChar;
 re:Integer;
begin
 pUser:=PChar(lUser.Text);
 pPassWord:=PChar(lPassWord.Text);
 re:=IdenAttes(pUser,pPassWord,h01);
 if re>0 then
  str.Panels[1].Text:='信息发送成功!' else
  str.Panels[1].Text:='信息发送失败!';
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Rec_Thread:= TRec_Thread.Create(False);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if Timer1.Enabled then
 Timer1.Enabled:=False else
 Timer1.Enabled:=True;
end;

end.

⌨️ 快捷键说明

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