Trasferire File Lato cliente Delphi XE Indy 10

di il
5 risposte

Trasferire File Lato cliente Delphi XE Indy 10

Ho un problema con questo codice scritto per Delphi 7 che usava il componente TClientSocket piutossto che TIdTCPClientSocket della Indy 10:
procedure TForm1.DownloadClick(Sender: TObject);
begin
if Client.Connected then
begin
RemoteFile	:= ToDownload.Text;
StoredLocalAs := DownloadAs.Text;
Client.Socket.SendText('<REQSTFILE>' + RemoteFile);
end;
else
showmessage('Non sei ancora connesso');
end;
end;
come errore mi da:
[DCC Error] Unit1.pas(282): E2003 Undeclared identifier: 'SendText'
premetto che nelle variabili ho fatto cosi:
var
  Form1: TForm1;
  RemoteFile: string;
  StoredLocalAs: string;
Come posso modificare questo codice per Indy 10?

5 Risposte

  • Re: Trasferire File Lato cliente Delphi XE Indy 10

    MrCamarium ha scritto:


    Ho un problema con questo codice scritto per Delphi 7 che usava il componente TClientSocket piutossto che TIdTCPClientSocket della Indy 10 [...]
    Se il componente è IdTCPClient, c'è il metodo SendCmd per inviare un comando tramite il socket, ma bisogna vedere il resto del contesto per capire se può andare bene o meno, se ci sono altre cose da impostare e così via.

    Ad ogni modo, prova a verificare ed eventualmente se ne riparla con più informazioni.

    Ciao!
  • Re: Trasferire File Lato cliente Delphi XE Indy 10

    Adesso vado al lavoro domani ci guardo.
  • Re: Trasferire File Lato cliente Delphi XE Indy 10

    Ho riscritto tutto da capo leggendo delle guide in rete:
    Lato Cliente:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    try
      Label1.Caption := 'Connessione in corso...';
      client.Port:=2630;
      client.Host:='127.0.0.1';
      client.Connect();
      except
      Label1.Caption := 'Errore Di Connessione';
    end;
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      client.Disconnect;
      Label1.Caption := 'Disconnesso';
    end;
    
    procedure TForm1.Button3Click(Sender: TObject);
    var TFLFileOut: TFileStream;
    begin
      TFLFileOut:= TFileStream.Create(ToDownload.Text, fmOpenRead);
      Client.IOHandler.Write(TFLFileOut, 0, true);
    end;
    
    procedure TForm1.ClientConnect(Sender: TObject);
    begin
    Label1.Caption := 'Connesso';
    Button1.Enabled := False;
    Button2.Enabled := True;
    end;
    
    procedure TForm1.ClientDisconnect(Sender: TObject);
    begin
    Label1.Caption := 'Disconnesso';
    Button1.Enabled := True;
    Button2.Enabled := False;
    end;
    Lato Server:
    procedure TForm1.ServerExecute(AContext: TIdContext);
    var TFSFileIn: TFileStream;
    begin
    Label1.Caption := 'Arriva qualcosa...';
    TFSFileIn:= TFileStream.Create(Edit1.Text, fmCreate);
    AContext.Connection.IOHandler.ReadStream(TFSFileIn);
    TFSFileIn.Free;
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    server.DefaultPort:=2630;
    server.Active:=true;
    end;
    
    Il problema è che anche se compila entrambi i file senza errore mi restituisce il file trasmesso di valore zero.
    Ti allego anche file.https://drive.google.com/file/d/1X8YW2cSOonNu-wRf_uBv9Hqaf5IkLhxz/view?usp=sharing
  • Re: Trasferire File Lato cliente Delphi XE Indy 10

    Anche se ho migliorato il codice continua a trasferire un file di valore zero.
    Lato Cliente:
    
    procedure TForm1.Button3Click(Sender: TObject);
    var TFLFileOut: TFileStream;
    begin
      TFLFileOut := TFileStream.Create(ToDownload.Text, fmOpenRead or fmShareDenyWrite);
      try
        Client.IOHandler.Write(TFLFileOut, 0, true);
      finally
        TFLFileOut.Free;
      end;
    end;
    Lato server:
    procedure TForm1.ServerExecute(AContext: TIdContext);
      var TFSFileIn: TFileStream;
    begin
      Label1.Caption := 'Arriva qualcosa...';
      TFSFileIn := TFileStream.Create(Edit1.Text, fmCreate);
      try
        AContext.Connection.IOHandler.ReadStream(TFSFileIn);
      finally
        TFSFileIn.Free;
      end;
    end;
  • Re: Trasferire File Lato cliente Delphi XE Indy 10

    Risolto. Il codice funzionava bene ero io che lo usavo nel modo sbagliato. in edit1 del server scrivevo il nome del file invece dovevo indicare solo la posizione del file un avvolta scaricato.
Devi accedere o registrarti per scrivere nel forum
5 risposte