在网上找了好长时间,也没有发现有SGIP的例子,伤感之余,终于做了一个Delphi6.0的SGIP例子 包含了一个服务端和一个客户端,协议共用,服务端为非阻塞长连接,客户端为阻塞短连接, 程序写的很乱,风格也很差,希望高手多多指教 (dulcet99@163.com,dulcet99@sina.com)
file://客户端 unit TestMain;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ScktComp, StdCtrls, ExtCtrls, xy, winsock; const FV_SNumber=3053112345; FV_LoginPass=''''hi''''; FV_LoginName=''''hi''''; FV_SPNumber=''''12345''''; T_Tel=''''13000000000''''; FV_corpID=''''12345''''; T_msg=''''我在天空写下你的名字,没有被风带走''''; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; ClientSocket1: TClientSocket; Button3: TButton; Button4: TButton; Button2: TButton; Button5: TButton; Button6: TButton; Button7: TButton; ServerSocket1: TServerSocket; panel1: TPanel; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); procedure Button7Click(Sender: TObject); procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); private { Private declarations } public { Public declarations } file://客户端协议定义 sHead: SGIPHead; file://消息头定义 sBind: XBind; file://连接请求验证 sBind_Resp: Bind_Resp; file://响应连接请求验证 sSubmit: XSubmit; file://SP->SMG提交短信 sSubmit_Resp: Submit_Resp; file://SMG响应SP提交的短信状态 sDeliver: XDeliver; file://SMG->SP提交短信 sDeliver_Resp: Deliver_Resp; file://SP响应SMG提交的短信状态 sReport: XReport; file://SMG->SP先前的短信状态 sReport_Resp: Report_Resp; file://响应命令执行状况 file://服务端协议定义 cHead: SGIPHead; file://消息头定义 cBind: XBind; file://连接请求验证 cBind_Resp: Bind_Resp; file://响应连接请求验证 cSubmit: XSubmit; file://SP->SMG提交短信 cSubmit_Resp: Submit_Resp; file://SMG响应SP提交的短信状态 cDeliver: XDeliver; file://SMG->SP提交短信 cDeliver_Resp: Deliver_Resp; file://SP响应SMG提交的短信状态 cReport: XReport; file://SMG->SP先前的短信状态 cReport_Resp: Report_Resp; file://响应命令执行状况 end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject); begin ClientSocket1.Active:=false; if ClientSocket1.Active then memo1.Lines.Add(''''客户端关闭失败'''') else memo1.Lines.Add(''''客户端关闭成功''''); end;
procedure TForm1.Button1Click(Sender: TObject); begin ClientSocket1.Active:=true; if ClientSocket1.Active then memo1.Lines.Add(''''客户端打开成功'''') else memo1.Lines.Add(''''客户端打开失败''''); end;
procedure TForm1.Button6Click(Sender: TObject); begin ServerSocket1.Active:=true; if ServerSocket1.Active then memo1.Lines.Add(''''服务端打开成功'''') else memo1.Lines.Add(''''服务端打开失败''''); end;
procedure TForm1.Button5Click(Sender: TObject); begin ServerSocket1.Active:=false; if ServerSocket1.Active then memo1.Lines.Add(''''服务端关闭失败'''') else memo1.Lines.Add(''''服务端关闭成功''''); end;
procedure TForm1.Button3Click(Sender: TObject); var FV_Date1_S,FV_Date2_S:string; str_i,SendSize:integer; stream1:TWinSocketStream; abc,bc:longword; begin stream1:=TWinSocketStream.Create(ClientSocket1.Socket,30000); memo1.Lines.Add(''''-------------------向服务端发送BIND请求--------------------''''); if not ClientSocket1.Active then begin memo1.Lines.Add(''''客户端没有打开''''); exit; end; DateTimeToString(FV_Date1_S,''''mmddhhnnss'''',now); DateTimeToString(FV_Date2_S,''''zzz'''',now); FillChar(sBind,sizeof(sBind),0); FillChar(sHead,sizeof(sHead),0); str_i:=sizeof(sHead)+sizeof(sBind); sBind.LonginType:=1; strpcopy(sBind.LonginPass,FV_LoginPass); strpcopy(sBind.LonginName,FV_LoginName); abc:=htonl(FV_SNumber); sHead.MessageLength:=htonl(str_i); sHead.CommandId:=htonl(SGIP_Bind); sHead.SNumber1:=abc; sHead.SNumber2:=htonl(StrToInt(FV_Date1_S)); sHead.SNumber3:=htonl(StrToInt(FV_Date2_S)); stream1.WriteBuffer(sHead,sizeof(sHead)); stream1.WriteBuffer(sBind,sizeof(sBind)); memo1.Lines.Add(''''sHead.MessageLength ''''+inttostr(ntohl(sHead.MessageLength))); memo1.Lines.Add(''''sHead.CommandId ''''+inttostr(ntohl(sHead.CommandId))); bc:=ntohl(abc); memo1.Lines.Add(''''sHead.SNumber1 ''''+inttostr(bc)); memo1.Lines.Add(''''sHead.SNumber2 ''''+inttostr(ntohl(sHead.SNumber2))); memo1.Lines.Add(''''sHead.SNumber3 ''''+inttostr(ntohl(sHead.SNumber3))); memo1.Lines.Add(''''sBind.LonginType ''''+inttostr(sBind.LonginType)); memo1.Lines.Add(''''sBind.LonginName ''''+sBind.LonginName); memo1.Lines.Add(''''sBind.LonginPass ''''+sBind.LonginPass); memo1.Lines.Add(''''------------------Bind请求已发送----------------------''''); if stream1.WaitForData(5000) then begin fillchar(cHead,sizeof(cHead),0); fillchar(cbind_resp,sizeof(cBind_Resp),0); stream1.ReadBuffer(cHead,sizeof(cHead)); stream1.ReadBuffer(cBind_resp,sizeof(cBind_resp)); end; memo1.Lines.Add(''''cHead.MessageLength ''''+inttostr(ntohl(cHead.MessageLength))); bc:=ntohl(cHead.CommandId); memo1.Lines.Add(''''cHead.CommandId ''''+inttostr(bc)); bc:=ntohl(cHead.SNumber1); memo1.Lines.Add(''''cHead.SNumber1 ''''+inttostr(bc)); memo1.Lines.Add(''''cHead.SNumber2 ''''+inttostr(ntohl(cHead.SNumber2))); memo1.Lines.Add(''''cHead.SNumber3 &n [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 问题的解决之道
|