|
byte; ExpireTime :array[0..15] of char; ScheduleTime :array[0..15] of char; ReportFlag :byte; TP_pid :byte; TP_udhi :byte; MessageCoding :byte; MessageType :byte; MessageLength :longword; MessageContent :array[0..160] of char; file://长度为 MessageLength; Reserve :array[0..7] of char; end; Submit_Resp=Record Result :byte; Reserve :array[0..7] of char; end; // XDeliver=Record UserNumber :array[0..20] of char; SPNumber :array[0..27] of char; {TP_pid :byte; TP_udhi :byte; MessageCoding :byte; MessageLength :longword;} MessageContent :array[0..254] of char; file://长度为 MessageLength; Reserver :array[0..7] of char; end; Deliver_Resp=Record Result :byte; Reserve :array[0..7] of char; end;
// XReport=Record SubSequNumber1,SubSequNumber2,SubSequNumber3 :longword; ReportType :byte; UserNumber :array[0..20] of char; State :byte; ErrorCode :byte; Reserve :array[0..7] of char; end; Report_Resp=Record Result :byte; Reserve :array[0..7] of char; end;
implementation end.
file://、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、// 服务端 unit main;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, xy, ScktComp, StdCtrls,winsock;
type TForm1 = class(TForm) Memo1: TMemo; ServerSocket1: TServerSocket; procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure ServerSocket1ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); private { Private declarations } public { Public declarations } 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,i2:integer; str:string; S_Number1,S_Number2,S_Number3,longI1:longword; s_Pack:SendPack; begin fillchar(sresp,sizeof(sresp),0); fillchar(ReHead,sizeof(ReHead),0); i1:=Socket.ReceiveBuf(ReHead,sizeof(ReHead)); if i1<>sizeof(ReHead) then begin memo1.Lines.Add(''''Recv message Error exit''''); exit; end; 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); memo1.Lines.Add(''''read SMG message''''); memo1.Lines.Add(inttostr(ReHead.MessageLength)); memo1.Lines.Add(inttostr(ReHead.CommandId)); memo1.Lines.Add(inttostr(ReHead.SNumber1)); memo1.Lines.Add(inttostr(ReHead.SNumber2)); memo1.Lines.Add(inttostr(ReHead.SNumber3)); if ReHead.CommandId=SGIP_UNBIND then begin file://断开连接 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 memo1.Lines.Add(''''Send SGIP_UNBIND_Resp Error'''') else memo1.Lines.Add(''''Send SGIP_UNBIND_Resp OK''''); end else if ReHead.CommandId=SGIP_BIND then begin file://SMG向SP发送一条MO短消息 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 memo1.Lines.Add(''''send SGIP_Bind_Resp Error'''') else memo1.Lines.Add(''''Send SGIP_bind_Resp''''); end else if ReHead.CommandId=SGIP_DELIVER then 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; if socket.SendBuf(s_Pack,SizeOf(s_Pack)) <>SizeOf(s_Pack) then memo1.Lines.Add(''''send SGIP_DELIVER_RESP Error'''') else memo1.Lines.Add(''''Send SGIP_DELIVER_RESP OK''''); memo1.Lines.Add(ReDeliver.UserNumber); memo1.Lines.Add(ReDeliver.SPNumber); file://longI1:=ntohl(ReDeliver.MessageLength); file://memo1.Lines.Add(inttostr(longI1)+'''' ''''+inttostr(ReDeliver.MessageLength)); memo1.Lines.Add(ReDeliver.MessageContent); end else if ReHead.CommandId=SGIP_REPORT then 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;   上一页 [1] [2] [3] [4] [5] 下一页 [系统软件]InstallShield Express for delphi制作安装程序定… [常用软件]InstallShield Express制作Delphi数据库安装程序 [Delphi程序]为什么选择Delphi.Net ? [Delphi程序]《关于VisiBroker For Delphi的使用》(4) [Delphi程序]Delphi 程序员代码编写标准指南 [Delphi程序]转贴:Conversion to Delphi 6: Missing unit Pro… [Delphi程序]Borland Delphi 9 的新特性 [Delphi程序]Delphi 键盘码表 [Delphi程序]Chuck Jazdzewski的离开意味着Delphi的终结吗? [Delphi程序]Delphi Access violations 问题的解决之道
|