应用TIdECHOServer和TIdEcho组件
来源:互联网 发布:sql server2012收费吗 编辑:程序博客网 时间:2024/05/21 10:13
(1) unit U_Echo_Client;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdEcho, StdCtrls;type TEcho_Client = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; BConnect: TButton; BSend: TButton; BDisCon: TButton; EAddress: TEdit; EText: TEdit; LTime: TLabel; LReceive: TLabel; IdEcho1: TIdEcho; procedure BConnectClick(Sender: TObject); procedure BSendClick(Sender: TObject); procedure BDisConClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure EAddressChange(Sender: TObject); private { Private declarations } public { Public declarations } end;var Echo_Client: TEcho_Client;implementation{$R *.dfm}procedure TEcho_Client.FormCreate(Sender: TObject);begin BConnect.Enabled := True; //激活“连接”按钮 EText.Enabled := False; //禁用发送文本框 EText.color := clSilver; BSend.Enabled :=False; //禁用“发送”按钮 BDisCon.Enabled := False; //禁用“断开连接”按钮end;procedure TEcho_Client.FormCloseQuery(Sender: TObject; var CanClose: Boolean);begin IdEcho1.Disconnect;end;procedure TEcho_Client.EAddressChange(Sender: TObject);begin // 设置要连接的服务器的地址 IdEcho1.Host := EAddress.Text;end;procedure TEcho_Client.BConnectClick(Sender: TObject);begin try //建立与Echo服务器的连接 IdEcho1.Connect; EText.Enabled := True; //激活发送文本框 EText.color := clWhite; BSend.Enabled := True;//激活“发送”按钮 BDisCon.Enabled := True;//激活“断开连接”按钮 BConnect.Enabled :=False;//禁用“连接”按钮 except //断开与Echo服务器的连接 IdEcho1.Disconnect; ShowMessage('连接失败,请检查服务器是否运行!'); end; //try..exceptend;procedure TEcho_Client.BSendClick(Sender: TObject);begin //对发送文本框的内容不为‘’的情况进行处理 if EText.Text<>'' then begin //发送并接收回声数据 lTime.Caption := IdEcho1.Echo ( EText.Text ); //显示发送和接收回声数据所需的时间 LReceive.Caption := IntToStr ( IdEcho1.EchoTime ); end //对发送文本框的内容为‘’的情况进行处理 else begin lTime.Caption :=''; LReceive.Caption :=''; end; end;procedure TEcho_Client.BDisConClick(Sender: TObject);begin //断开与Echo服务器的连接 IdEcho1.Disconnect; BConnect.Enabled := True; //激活“连接”按钮 EText.Enabled := False; //禁用发送文本框 EText.color := clSilver; BSend.Enabled :=False; //禁用“发送”按钮 BDisCon.Enabled := False; //禁用“断开连接”按钮end;end.(2) unit U_Echo_Server;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPServer, IdEchoServer;type TF_Echo_Server = class(TForm) Label1: TLabel; Label2: TLabel; Button1: TButton; IdECHOServer1: TIdECHOServer; procedure Button1Click(Sender: TObject); procedure FormActivate(Sender: TObject); procedure IdECHOServer1Disconnect(AThread: TIdPeerThread); procedure IdECHOServer1Connect(AThread: TIdPeerThread); private { Private declarations } public { Public declarations } end;var F_Echo_Server: TF_Echo_Server;implementation{$R *.dfm}procedure TF_Echo_Server.FormActivate(Sender: TObject);begin try //激活TIdECHOServer组件 IdECHOServer1.Active := True; except ShowMessage('拒绝连接!由于安全的原因无法绑定到预定的端口!'); Application.Terminate; end;end;procedure TF_Echo_Server.IdECHOServer1Disconnect(AThread: TIdPeerThread);begin //更新窗体上显示的服务器状态 Label2.caption := '[ 空闲-等待新用户 ]';end;procedure TF_Echo_Server.IdECHOServer1Connect(AThread: TIdPeerThread);begin //更新窗体上显示的服务器状态 Label2.caption := '[ 服务于客户 ]';end;procedure TF_Echo_Server.Button1Click(Sender: TObject);begin if IdECHOServer1.active then IdECHOServer1.active := false; Application.terminate;end;end.