首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

参照网上做的indy简单TCP程序,为什么不行,该怎么处理

2012-03-06 
参照网上做的indy简单TCP程序,为什么不行教程网址:http://www.bianceng.cn/Programming/Delphi/200711/543

参照网上做的indy简单TCP程序,为什么不行
教程网址:http://www.bianceng.cn/Programming/Delphi/200711/5436_3.htm

接下来是代码 可能大家都做过 我也基本是复制粘贴的 就申明了几个过程/变量而已 居然还会出错

客户端:

Delphi(Pascal) code
unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent,  IdComponent, IdTCPConnection, IdTCPClient;type  TFormMain = class(TForm)    IdTCPClient: TIdTCPClient;    IdAntiFreeze: TIdAntiFreeze;    EdtHost: TEdit;    EdtPort: TEdit;    Label1: TLabel;    Label2: TLabel;    Label3: TLabel;    EdtData: TEdit;    LbLog: TListBox;    BtnConnect: TButton;    BtnSend: TButton;    BtnDisconnect: TButton;    Label4: TLabel;    procedure BtnConnectClick(Sender: TObject);    procedure BtnSendClick(Sender: TObject);    procedure BtnDisconnectClick(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end;var  FormMain: TFormMain;implementation{$R *.dfm}//连接procedure TFormMain.BtnConnectClick(Sender: TObject);begin  IdTCPClient.Host := EdtHost.Text;  IdTCPClient.Port := StrToInt(EdtPort.Text);  LbLog.Items.Add('正在连接 ' + EdtHost.Text + '...');  with IdTCPClient do  begin    try      Connect(5000);      try      LbLog.Items.Add(ReadLn());      BtnConnect.Enabled := False;      BtnSend.Enabled := True;      BtnDisconnect.Enabled := True;      except      LbLog.Items.Add('远程主机无响应!');      IdTCPClient.Disconnect();      end;//end try    except    LbLog.Items.Add('无法建立到' + EdtHost.Text + '的连接!');    end;//end try  end;//end withend;//发送数据procedure TFormMain.BtnSendClick(Sender: TObject);beginLbLog.Items.Add('DATA ' + EdtData.Text);with IdTCPClient dobegintryWriteLn('DATA ' + EdtData.Text);LbLog.Items.Add(ReadLn())exceptLbLog.Items.Add('发送数据失败!');IdTCPClient.Disconnect();LbLog.Items.Add('同主机 ' + EdtHost.Text + ' 的连接已断开!');BtnConnect.Enabled := True;BtnSend.Enabled := False;BtnDisconnect.Enabled := False;end;//end tryend;//end withend;//断开连接procedure TFormMain.BtnDisconnectClick(Sender: TObject);varReceived: string;beginLbLog.Items.Add('QUIT');tryIdTCPClient.WriteLn('QUIT');finallyIdTCPClient.Disconnect();LbLog.Items.Add('同主机 ' + EdtHost.Text + ' 的连接已断开!');BtnConnect.Enabled := True;BtnSend.Enabled := False;BtnDisconnect.Enabled := False;end;//end tryend;end.


服务端:
Delphi(Pascal) code
unit Unit2;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPServer, StrUtils;type  TFormMain = class(TForm)    Label1: TLabel;    EdtPort: TEdit;    Label2: TLabel;    EdtData: TEdit;    Label3: TLabel;    LbLog: TListBox;    BtnStart: TButton;    BtnStop: TButton;    IdTCPServer: TIdTCPServer;    procedure BtnStartClick(Sender: TObject);    procedure BtnStopClick(Sender: TObject);    procedure IdTCPServerConnect(AThread: TIdPeerThread);    procedure IdTCPServerExecute(AThread: TIdPeerThread);    procedure DisplayData();    procedure AddLogEntry();  private    { Private declarations }  public    { Public declarations }  end;var  FormMain: TFormMain;  FLogEntry: string;  FReceived: string;implementation{$R *.dfm}procedure TFormMain.BtnStartClick(Sender: TObject);begin  IdTCPServer.DefaultPort := StrToInt(EdtPort.Text);           //获取端口值  IdTCPServer.Active := True;                                  //启用IdTCPServer  BtnStart.Enabled := False;  BtnStop.Enabled := True;  LbLog.Items.Add('服务器已成功启动!');end;procedure TFormMain.BtnStopClick(Sender: TObject);begin  IdTCPServer.Active := False;                                  //不启用  BtnStart.Enabled := True;  BtnStop.Enabled := False;  LbLog.Items.Add('服务器已成功停止!');end;procedure TFormMain.IdTCPServerConnect(AThread: TIdPeerThread); //被连接begin  LbLog.Items.Add('来自主机 '  + AThread.Connection.Socket.Binding.PeerIP  + ' 的连接请求已被接纳!');  AThread.Connection.WriteLn('100: 欢迎连接到TCP服务器!');end;procedure TFormMain.IdTCPServerExecute(AThread: TIdPeerThread);varsCommand: string;begin  with AThread.Connection do  begin    sCommand := ReadLn();    FLogEntry := sCommand + ' 来自于主机 '    + AThread.Connection.Socket.Binding.PeerIP;    AThread.Synchronize(AddLogEntry);  if AnsiStartsText('DATA ', sCommand) then  begin    FReceived := RightStr(sCommand, Length(sCommand)-5);    WriteLn('200: 数据接收成功!');    AThread.Synchronize(DisplayData);  end  else if SameText(sCommand, 'QUIT') then begin    FLogEntry := '断开同主机 '    + AThread.Connection.Socket.Binding.PeerIP    + ' 的连接!';    AThread.Synchronize(AddLogEntry);    Disconnect;  end  else begin    WriteLn('500: 无法识别的命令!');    FLogEntry := '无法识别命令:' + sCommand;    AThread.Synchronize(AddLogEntry);  end;//endifend;end;procedure TFormMain.DisplayData();begin  EdtData.Text := FReceived;end;procedure TFormMain.AddLogEntry();begin  LbLog.Items.Add(FLogEntry);end;end. 



连上去是远程主机无响应! 郁闷

[解决办法]
Delphi(Pascal) code
      try      LbLog.Items.Add(ReadLn());      BtnConnect.Enabled := False;      BtnSend.Enabled := True;      BtnDisconnect.Enabled := True;      except      LbLog.Items.Add('远程主机无响应!');      IdTCPClient.Disconnect();      end;
[解决办法]
由于是复制的,button没有事件

热点排行