我使用 Tidtcpclient 的 writestream 传输文件失败。
对indy不是很了解,网络上也很少有比较详细的教程,期待达者赐教。

解决方案 »

  1.   

    client:
    procedure TFormClient.btnTestClick(Sender: TObject);
    begin
      IdTCPClient1.SendCmd ('test');
      ShowMessage (IdTCPClient1.LastCmdResult.TextCode + ' : ' +
        IdTCPClient1.LastCmdResult.Text.Text);
    end;procedure TFormClient.btnConnectClick(Sender: TObject);
    begin
      IdTCPClient1.Connect;
    end;procedure TFormClient.btnDisconnectClick(Sender: TObject);
    begin
      IdTCPClient1.Disconnect;
    end;procedure TFormClient.btnExecuteClick(Sender: TObject);
    begin
      IdTCPClient1.WriteLn('execute');
      ShowMessage (IdTCPClient1.ReadLn);
    end;procedure TFormClient.btnGetFileClick(Sender: TObject);
    var
      stream: TStream;
    begin
      IdTCPClient1.WriteLn('getfile ' + HttpEncode (edFileName.Text));
      stream := TMemoryStream.Create;
      try
        IdTCPClient1.ReadStream(stream);
        stream.Position := 0;
        Image1.Picture.Bitmap.LoadFromStream (stream);
      finally
        stream.Free;
      end;
    end;
      

  2.   

    server:
    procedure TFormServer.IdTCPServer1TIdCommandHandler1Command(
      ASender: TIdCommand);
    begin
      ASender.Thread.Connection.Writeln ('This is a dynamic response');
    end;procedure TFormServer.FormCreate(Sender: TObject);
    begin
      IdTCPServer1.Active := True;
    end;procedure TFormServer.IdTCPServer1Connect(AThread: TIdPeerThread);
    begin
      lbLog.Items.Add ('Connected from: ' +
        AThread.Connection.Socket.Binding.PeerIP);
    end;procedure TFormServer.IdTCPServer1Disconnect(AThread: TIdPeerThread);
    begin
      lbLog.Items.Add ('Disconnected from: ' +
        AThread.Connection.Socket.Binding.PeerIP);
    end;procedure TFormServer.IdTCPServer1TIdCommandHandler2Command(
      ASender: TIdCommand);
    var
      filename: string;
      fstream: TFileStream;
    begin
      if Assigned (ASender.Params) then
        filename := HttpDecode (ASender.Params[0]);
      if not FileExists (filename) then
      begin
        ASender.Response.Text := 'File not found';
        lbLog.Items.Add ('File not found: ' + filename);
        raise EIdTCPServerError.Create ('File not found: ' + filename);
      end
      else
      begin
        fstream := TFileStream.Create (filename, fmOpenRead);
        try
          ASender.Thread.Connection.WriteStream(fstream, True, True);
          // fStream.Size;
          lbLog.Items.Add ('File returned: ' + filename +
            ' (' + IntToStr (fStream.Size) + ')');
        finally
          fstream.Free;
        end;
      end;
    end;