各位大俠, 
   為什麼我用indy的IdTCPClient接收數據時,程序沒反應呢??
  (使用的是s:=self.IdTCPClient1.ReadLn();) 
謝謝!@

解决方案 »

  1.   

    应该要首先保证连接正常。
    第二要有server给他发sendln吧!
      

  2.   

    unit Main;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
      StdCtrls;type
      TfrmMain = class(TForm)
        TCPClient: TIdTCPClient;
        Edit1: TEdit;
        Button1: TButton;
        Button2: TButton;
        OpenDialog: TOpenDialog;
        Button3: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      frmMain: TfrmMain;implementation{$R *.dfm}procedure TfrmMain.Button1Click(Sender: TObject);
    var
      sFile: String;
      MyFStream: TFileStream;
    begin
      if not TCPClient.Connected then TCPClient.Connect;
      if Trim(Edit1.Text) = '' then Edit1.Text := 'No Message';
      //先发一句话
      TCPClient.WriteLn(Edit1.Text);  //再发文件
      sFile := 'D:\Temp.txt';
      Memo1.Lines.SaveToFile(sFile);
      TCPClient.OpenWriteBuffer;
      MyFStream := TFileStream.Create(sFile, fmOpenRead);
      try
        TCPClient.WriteStream(MyFStream);
      finally
        MyFStream.Free;
      end;
      TCPClient.CloseWriteBuffer;
      TCPClient.Disconnect;
    end;procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      if TCPClient.Connected then TCPClient.Disconnect;
    end;procedure TfrmMain.Button2Click(Sender: TObject);
    var
      MyFStream: TFileStream;
      sFile:string;
    begin
      OpenDialog.Filter := '*.txt|*.txt';
      if not OpenDialog.Execute then Exit;
      sFile := OpenDialog.FileName;
      TCPClient.Connect;
      //TCPClient.WriteLn('PUT '+ExtractFileName(sFile));
      //showmessage(TCPClient.ReadLnWait);
      TCPClient.OpenWriteBuffer;
      MyFStream := TFileStream.Create(sFile, fmOpenRead);
      try
        TCPClient.WriteStream(MyFStream);
      finally
        MyFStream.Free;
      end;//try..
      TCPClient.closeWriteBuffer;
      //showmessage(TCPClient.ReadLnWait);
      TCPClient.Disconnect;
    end;procedure TfrmMain.Button3Click(Sender: TObject);
    begin
      TCPClient.Disconnect;
    end;end.
      

  3.   

    unit Main;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, IdBaseComponent, IdComponent, IdTCPServer, StdCtrls;type
      TfrmMain = class(TForm)
        TCPServer: TIdTCPServer;
        meoInfo: TMemo;
        meoConnections: TMemo;
        meoFileCon: TMemo;
        procedure TCPServerExecute(AThread: TIdPeerThread);
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      frmMain: TfrmMain;implementationuses IdTCPConnection, IdSocketHandle;{$R *.dfm}procedure TfrmMain.TCPServerExecute(AThread: TIdPeerThread);
    var
      MyFStream: TFileStream;
      sFileName: String;
    begin
      //先读一句话
      meoInfo.Lines.Add(AThread.Connection.ReadLn);
      meoInfo.Lines.Add('ReadLn OK');  //在读文件流
      sFileName := 'D:\111.txt';
      AThread.Connection.OpenWriteBuffer;
      MyFStream := TFileStream.Create(sFileName, fmCreate);
      try
        AThread.Connection.ReadStream(MyFStream, -1, True);
        meoInfo.Lines.Add('ReadStream OK');
      finally
        MyFStream.Free;
      end;
      AThread.Connection.CloseWriteBuffer;
    end;procedure TfrmMain.FormCreate(Sender: TObject);
    begin
      TCPServer.Active := True;
    end;procedure TfrmMain.FormDestroy(Sender: TObject);
    begin
      TCPServer.Active := False;
    end;end.
      

  4.   

    server端可能并没有给你发送信息,而client端等待接收server端发送的信息,导致死机状设置tcpclient的接收超时时间,可以解决你的问题