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