📄 main.~pas
字号:
strpcopy(LinkID,'');//点播业务使用的LinkID,非点播类业务的MT流程不使用该字段。
//Reserve :array[0..7] of char;//保留
end;
bCmpp_Submit( ClientSocket1.Socket, CMPP_SUBMIT_tag );
end;
procedure bCmpp_Terminate( cSocket: TCustomWinSocket );
type
T_init = packed record
head: TCMPP_HEAD_tag;
body: TCMPP_CONNECT_tag;
end;
var
bInit: T_init;
int1, int2, int3: integer;
begin
// try
int1 := SizeOf( TCMPP_HEAD_tag );
int2 := SizeOf( TCMPP_TERMINATE_tag );
int3 := int1 + int2;
FillChar( bInit.head, int1, 0 );
FillChar( bInit.body, int2, 0 );
bInit.head.Total_Length := htonl( int3 );
bInit.head.Command_ID := htonl( CMPP_TERMINATE );
bInit.head.Sequence_ID := htonl( 1 );
if cSocket.SendBuf( bInit, int3 ) <> int3 then
begin
//main.memo1.Lines.Add( '发送连接操作失败' );
exit;
end;
//memo1.Lines.Add( '发送连接操作成功,正等待响应消息' );
{ except
on e: exception do
memo1.Lines.Add( '发送连接操作失败,错误信息' + e.Message );
end; //try-except }
end;
procedure TFrmMain.ClientSocket1Read( Sender: TObject;
Socket: TCustomWinSocket );
var
ReadBufSize: shortint;
CMPP_HEAD_tag: tCMPP_HEAD_tag;
//ttlen:integer;
//BUFFER:ARRAY[0..255] OF CHAR;
//HCommand_Id:longword;
begin
try
FillChar( CMPP_HEAD_tag, sizeof( tCMPP_HEAD_tag ), 0 );
ReadBufSize := Socket.ReceiveBuf( CMPP_HEAD_tag, sizeof( tCMPP_HEAD_tag ) );
//ReadBufSize := Socket.ReceiveBuf( CMPP_HEAD_tag, 33 );
//showmessage('Total_Length is ' +inttostr(ntohl(cmpp_head_tag.Total_Length)));
//HCommand_Id:=ntohl(cmpp_head_tag.Command_Id);
//showmessage('Command_Id is '+inttostr(HCommand_Id));
//showmessage('Sequence_Id is '+inttostr(ntohl(cmpp_head_tag.Sequence_Id)));
//showmessage('readbufer大小'+inttostr(readbufSize));
//showmessage('tCMPP_HEAD_tag 大小'+inttostr(sizeof( tCMPP_HEAD_tag ) ));
//memo1.Lines.Add('tCMPP_HEAD_tag 大小'+inttostr(sizeof( tCMPP_HEAD_tag ) ));
if ( ReadBufSize = 0 ) or ( ReadBufSize = -1 ) or ( ReadBufSize <> SizeOf( tCMPP_HEAD_tag ) ) then
//memo1.Lines.Add('消息头长度不正确!');
exit;
CMPP_HEAD_tag.Command_Id := ntohl(cmpp_head_tag.Command_Id); //转换为十进制的Command_ID
//CMPP_HEAD_tag.Total_Length:=ntohl(CMPP_HEAD_tag.Total_Length);
//showmessage(intTostr(CMPP_HEAD_tag.Command_Id));
if CMPP_HEAD_tag.Command_Id = CMPP_CONNECT then //ISMG对SP发起的连接请求
CmppRead_CONNECT( Socket, CMPP_HEAD_tag );
if CMPP_HEAD_tag.Command_Id = CMPP_CONNECT_RESP then
CmppRead_CONNECT_RESP( Socket, CMPP_HEAD_tag );
if CMPP_HEAD_tag.Command_Id = CMPP_TERMINATE then //短信中心发起的断开连接操作
CmppRead_TERMINATE( Socket, CMPP_HEAD_tag );
if CMPP_HEAD_tag.Command_Id = CMPP_TERMINATE_RESP then
memo1.Lines.Add('断开与短信网关的连接');
if CMPP_HEAD_tag.Command_Id = CMPP_DELIVER then
CmppRead_DELIVER( Socket, CMPP_HEAD_tag );
if CMPP_HEAD_tag.Command_Id = CMPP_SUBMIT_RESP then
CmppRead_SUBMIT_RESP( Socket, CMPP_HEAD_tag );
{if CMPP_HEAD_tag.Command_Id = CMPP_ACTIVE_TEST then
CmppRead_ACTIVE_TEST( Socket, CMPP_HEAD_tag );
if CMPP_HEAD_tag.Command_Id = CMPP_ACTIVE_TEST_RESP then
CmppRead_ACTIVE_TEST_RESP( Socket, CMPP_HEAD_tag ); }
except
end;
end;
procedure TFrmMain.CmppRead_CONNECT_RESP( ReadSock: TCustomWinSocket;
Cmpp_Head: tCMPP_HEAD_tag );
var CMPP_CONNECT_RESP_tag:TCMPP_CONNECT_RESP_tag;
//Status:integer;
begin
FillChar( CMPP_CONNECT_RESP_tag, SizeOf( CMPP_CONNECT_RESP_tag ), 0 );
//showmessage('CMPP_CONNECT_RESP_tag 大小'+inttostr(sizeof(TCMPP_CONNECT_RESP_tag) ));
//BufSize:=ReadSock.ReceiveBuf( CMPP_CONNECT_RESP_tag, SizeOf( CMPP_CONNECT_RESP_tag ) );
// showmessage('readsiaze 大小'+inttostr(bufsize ));
if ReadSock.ReceiveBuf( CMPP_CONNECT_RESP_tag, SizeOf( CMPP_CONNECT_RESP_tag ) )<> SizeOf( CMPP_CONNECT_RESP_tag ) then
begin
Showmessage('CMPP_CONNECT_RESP_tag 大小'+inttostr(SizeOf( CMPP_CONNECT_RESP_tag ) ));
Memo1.Lines.Add('ReceiveBuf CMPP_CONNECT_RESP_tag Error');
exit;
end
else
CMPP_CONNECT_RESP_tag.Status:= ntohl(CMPP_CONNECT_RESP_tag.Status);
if CMPP_CONNECT_RESP_tag.Status =ERR_CONNECT_SUCCESS then
begin
//Showmessage('CMPP_CONNECT_RESP_tag 大小'+inttostr(SizeOf( CMPP_CONNECT_RESP_tag ) ));
Memo1.Lines.Add(timetostr(now)+'----->,认证成功,连接成功!');
StatusBar1.SimpleText:='ok';
end
else if CMPP_CONNECT_RESP_tag.Status =ERR_CONNECT_BODY then
Memo1.Lines.Add(timetostr(now)+'----->连接失败,结构体错误!')
else if CMPP_CONNECT_RESP_tag.Status =ERR_CONNECT_INVALID_SP_ID then
Memo1.Lines.Add(timetostr(now)+'----->连接错误,非法SP ID!')
else if CMPP_CONNECT_RESP_tag.Status =ERR_CONNECT_SP_AUTHENTICATION then
Memo1.Lines.Add(timetostr(now)+'----->连接错误,SP认证错!')
else if CMPP_CONNECT_RESP_tag.Status =ERR_CONNECT_VERSION then
Memo1.Lines.Add(timetostr(now)+'----->连接失败,版本太高!')
else
Memo1.Lines.Add(timetostr(now)+'----->连接失败,其它错误!');
end;
procedure TFrmMain.CmppRead_CONNECT( ReadSock: TCustomWinSocket;
Cmpp_Head: tCMPP_HEAD_tag );
begin
//ISMG对SP发起的连接请求
end;
procedure TFrmMain.CmppRead_TERMINATE(ReadSock: TCustomWinSocket; //短信中心发起的断开连接操作
Cmpp_Head: tCMPP_HEAD_tag);
var CMPP_TERMINATE_tag:TCMPP_TERMINATE_tag;
begin
FillChar(CMPP_TERMINATE_tag, SizeOf(CMPP_TERMINATE_tag ), 0 );
if ReadSock.ReceiveBuf( CMPP_TERMINATE_tag, SizeOf(CMPP_TERMINATE_tag ) )<> SizeOf( CMPP_TERMINATE_tag ) then
begin
Showmessage('CMPP_TERMINATE_tag 大小'+inttostr(SizeOf( CMPP_TERMINATE_tag ) ));
Memo1.Lines.Add('ReceiveBuf CMPP_TERMINATE_tag Error');
exit;
end
else
begin
clientsocket1.close;
Memo1.Lines.Add(timetostr(now)+'----->,ISMG请求断开,连接关闭!');
StatusBar1.SimpleText:='断开';
end;
end;
procedure TFrmMain.CmppRead_DELIVER(ReadSock: TCustomWinSocket;
Cmpp_Head: tCMPP_HEAD_tag);
var
SizeI1, SizeI2: integer;
bufferStr : array[0..199] of char;
bufferSize: Integer;
CMPP_DELIVER_HEAD_tag: tCMPP_DELIVER_HEAD_tag;
Cmpp_Deliver_Resp_ItoS: tCmpp_Deliver_Resp_ItoS;
CMPP_DELIVER_tag: tCMPP_DELIVER_tag;
begin
SizeI1 := SizeOf(tCmpp_Deliver_Resp_ItoS); //Cmpp_Deliver_Resp_ItoS
SizeI2 := SizeOf(tCMPP_DELIVER_HEAD_tag);
FillChar( Cmpp_Deliver_Resp_ItoS, SizeI1, 0 );
FillChar( CMPP_DELIVER_HEAD_tag, SizeI2, 0 );
FillChar( bufferStr, 200, 0 );
ReadSock.ReceiveBuf(CMPP_DELIVER_HEAD_tag,SizeI2);
if CMPP_DELIVER_HEAD_tag.Registered_Delivery = 0 then //收到短信处理
begin
FillChar( CMPP_DELIVER_tag, SizeOf(tCMPP_DELIVER_tag), 0);
bufferSize := CMPP_DELIVER_HEAD_tag.Msg_Length+8;
if ReadSock.ReceiveBuf(bufferStr,bufferSize) <> bufferSize then
begin
memo1.Lines.Add('ReceiveBuf(bufferStr,bufferSize) error');
exit;
end;
Move (bufferStr, CMPP_DELIVER_tag.Msg_Content, bufferSize-8);
memo1.Lines.Add('收到短信,内容'+CMPP_DELIVER_tag.Msg_Content);
end
else if CMPP_DELIVER_HEAD_tag.Registered_Delivery = 1 then//返回状态报告处理
begin
bufferSize := CMPP_DELIVER_HEAD_tag.Msg_Length + 8;
ReadSock.ReceiveBuf( bufferStr, bufferSize );
memo1.Lines.Add('返回状态报告');
end
else
begin
//WriteLog.WriteExceptLog( IniBody.OtherLogFileName, DateTimeToStr(now) +
// '收到其它短信,Registered_Delivery=' + IntToStr( CMPP_DELIVER_HEAD_tag.Registered_Delivery )); //memo1.Lines.Add('==============CMPP_CONNECT 发送返回包错误');
//memo1.Lines.Add('收到其它类型短信');
end;
Cmpp_Deliver_Resp_ItoS.Head.Total_Length := htonl( 21 );
Cmpp_Deliver_Resp_ItoS.Head.Command_Id := htonl(CMPP_DELIVER_RESP);
Cmpp_Deliver_Resp_ItoS.Head.Sequence_Id := Cmpp_Head.Sequence_Id;
Cmpp_Deliver_Resp_ItoS.Body.Msg_Id := CMPP_DELIVER_HEAD_tag.Msg_Id;
Cmpp_Deliver_Resp_ItoS.Body.Result := 0;
end;
procedure TFrmMain.CmppRead_SUBMIT_RESP(ReadSock: TCustomWinSocket;
Cmpp_Head: tCMPP_HEAD_tag);
var
SizeI1: integer;
CMPP_SUBMIT_RESP_tag: tCMPP_SUBMIT_RESP_tag;
begin
SizeI1 := SizeOf(CMPP_SUBMIT_RESP_tag);
FillChar(CMPP_SUBMIT_RESP_tag, SizeI1, 0);
if ReadSock.ReceiveBuf(CMPP_SUBMIT_RESP_tag, SizeI1) <> SizeI1 then
begin
Memo1.Lines.Add('接收短信发送的包体出错');
exit;
end;
end;
procedure TFrmMain.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.SimpleText:='未连接';
end;
procedure TFrmMain.bTerminateClick(Sender: TObject);
begin
bCmpp_Terminate( ClientSocket1.Socket);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -