📄 demos.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 + -