FTP-Client / Synapse

Alle Fragen zur Netzwerkkommunikation
wolf_z
Beiträge: 88
Registriert: Mo 31. Aug 2009, 09:31

FTP-Client / Synapse

Beitrag von wolf_z »

Hi allerseits
Ich versuche gerade, mit Synapse eine Datei von meinem Domain Hoster (df) herunterzuladen. Aus verschiedenen Quellen habe ich mir das folgende auf der Basis von TFTPSend zusammengestrickt:

Code: Alles auswählen

uses ...  ftpSend, blcksock, ...
 
procedure TForm1.btn_getFileClick(Sender: TObject);
begin
  // Create TFTPClient
  TFTPClient := TFTPSend.Create;
  with TFTPClient do
     begin
     // Set Target-Parameter
     TargetHost := ed_Host.Text;
     TargetPort := ed_Port.Text;
     UserName := ed_user.Text;
     Password := ed_passw.Text;
     // Try sending file 
     PassiveMode := true;
     DirectFile := True;
     DirectFileName := ed_getFile.Text;
     DSock.NonBlockMode := True;
     // DSock.OnStatus := OnDataStatus;
     // OnStatus := OnMainStatus;
     Timeout := 30000;
     if Login then                         // <--------- ab hier geht es nicht!
        begin
        ChangeWorkingDir('/');
        remoteFileSize := FileSize(ed_getFile.Text);
        RetrieveFile(ed_getFile.Text, false);
        Logout;
        end
     else
        begin
        // Filetransfer not successful
        // ...
        end;
     Free;
     end;
end;


Leider scheitert das Programm schon beim Login. Bisher benutze ich WinINet, das auch unter Lazarus für Windows gut funktioniert. Aber da ich plattformunabhängig werden möchte, dachte ich an Synapse. Aber so schön einfach wie bei WinInet funktioniert das wohl nicht.

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: FTP-Client / Synapse

Beitrag von theo »

Versuch's erst mal mit den eingebauten "Convenience" Funktionen bei Synapse:
In ftpsend:
function FtpGetFile(const IP, Port, FileName, LocalFile, User, Pass: string): Boolean;
function FtpPutFile(const IP, Port, FileName, LocalFile, User, Pass: string): Boolean;
function FtpInterServerTransfer( const FromIP, FromPort, FromFile, FromUser, FromPass: string; const ToIP, ToPort, ToFile, ToUser, ToPass: string): Boolean;

Das sind Einzeiler, die du nur mit den richtigen Parametern füllen musst.
Wenn du dann mehr machen willst, schaust dir am besten die Quellen dieser Funktionen an.

S.a.: http://synapse.ararat.cz/doc/help/ftpse ... FtpGetFile

wolf_z
Beiträge: 88
Registriert: Mo 31. Aug 2009, 09:31

Re: FTP-Client / Synapse

Beitrag von wolf_z »

Die Convenience-Funktionen hab ich schon probiert. Die verwenden auch nur TFTPSend. Allerdings noch einfacher als in meinem Beispiel. Mein Beispiel ist übrigens weitgehend angelehnt an ein Beispiel von VisualSynapse. Dieses Projekt ist allerdings noch ziemlich rudimentär.

In den Convenience-Funktionen werden nur die vier Transfer-Parameter an TFTPSend übergeben. Keinerlei weitere Angaben z.B. wie die Authentifizierung zu erfolgen hat. Da wird dann wohl das denkbar einfachste Standard-Verfahren genommen. Und ich schätze, dass bei einem Hoster wie z.B. DF irgendwie das Passwort verschlüsselt wird (braucht man vieleicht doch wieder Cryptlib oder ähnliches?) und irgendein komplexes Login-Protokoll.

Das Problem von Synapse scheint mir zu sein, dass es wohl gut verwendbar ist, wenn man sich zu seinem Client selber den zugehörigen Server baut. Aber gibt es dort schon Erfahrungen / Demos mit Verbindungen zu beliebigen Hostern, etc?

Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

Re: FTP-Client / Synapse

Beitrag von Ralph59 »

Hallo Wolf_z,

habe Dir da mal ein kleines Beispiel vorbereitet und k. getestet. Ich hoffe, das hilft Dir weiter:

Ein einfaches Formular mit 2 Buttun's

Code: Alles auswählen

interface
 
uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, FTPSend;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    aFTP: TFTPSend;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
var
  I:integer;
  c1:string;
begin
  aFTP := TFTPSend.Create;
  aFTP.TargetHost := 'www.Deine_Domaine.de';
  aFTP.TargetPort := '21';
  aFTP.UserName := 'benutzername';
  aFTP.Password := 'passwort';
  c1 := 'Dateien auf dem Server'+chr(13);
  if aFTP.Login then begin
    aftp.ChangeToRootDir;
    aftp.List('',False);
    for I:=0 to aftp.FtpList.Count-1 do begin
      if aftp.FtpList.Items[I].Directory = true then begin
        c1 := c1 + aftp.FtpList.Items[I].FileName + 'Dir'+chr(13);
      end else begin
        c1 := c1 + aftp.FtpList.Items[I].FileName + 'Datei'+chr(13);
      end;
    end;
  aFTP.Logout;
  end;
  showmessage(c1);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  cVerz:String;
  Result:Boolean;
begin
  cVerz := 'C:\Programme\lazarus\source\FDM\ftptest\' ;
  aFTP := TFTPSend.Create;
  aFTP.TargetHost := '
www.Deine_Domaine.de';
  aFTP.TargetPort := '
21';
  aFTP.UserName := '
benutzername';
  aFTP.Password := '
passwort';
 
  if aFTP.Login then begin
    aftp.ChangeToRootDir;  //wird nicht benoetigt, da bei changeworkdir durch den ersten / auf root verwiesen wird
    aftp.ChangeWorkingDir('
/httpsdocs/');
    aftp.DirectFileName := cVerz+'
Test.html';
    aftp.DirectFile:=True;
    Result := aftp.RetrieveFile('
index.html', False);
    if Result = true then begin
      showmessage('
Datei in '+ cVerz + ' gespeichert');
    end else begin
      showmessage('
ups Datei konnte nicht gedownloadet werden');
    end;
    aftp.Logout;
  end;
end;
 
initialization
  {$I unit1.lrs}
 
end.


Mit freundlichem Gruß

Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

wolf_z
Beiträge: 88
Registriert: Mo 31. Aug 2009, 09:31

Re: FTP-Client / Synapse

Beitrag von wolf_z »

@Ralph59
Danke, aber es funktioniert leider auch nicht. Ich mache das genauso, wie Du. Ich übergebe die 4 Parameter, die ich schon unzählige male mit anderen Programmen getestet habe und das Logon scheitert!

Ich habe bisher noch nie Probleme mit FTP-Clients - auch selbst geschriebenen - bei Domain Factory (df) gehabt, so dass es auch nicht an Firewall-Einstellungen oder ähnlichem liegen kann.

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: FTP-Client / Synapse

Beitrag von theo »

Also das:

FtpGetFile('ftp.freepascal.org', '21', '/pub/fpc/snapshot/fixes/source/index.txt', 'fpcindex.txt', 'anonymous', 'guest');

klappt bei mir auf Anhieb. Bei dir nicht?

Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

Re: FTP-Client / Synapse

Beitrag von Ralph59 »

Hollo,

also, wenn bereits dein Login nicht funktioniert, dann würde ich als erstes einmal probieren, ob ich den Server anpingen kann, oder mit einem standard FTP Client auf den Server zugreifen kann.
Wenn ja,
dann würde ich prüfen, ob ich evtl. einen Fehler im usernamen oder passwort habe (Groß- und Kleinschreibung beachten).
Im Zweifelsfall sogar mit copy paste übertragen.

Bist Du Dir denn sicher, dass bereits der Login nicht funktioniert?

Code: Alles auswählen

if aFTP.Login then begin
  ...
  end else begin
  showmessage('Ups kein Login möglich');
  aFTP.Logout;
  end;


Mit freundlichem Gruß

Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

wolf_z
Beiträge: 88
Registriert: Mo 31. Aug 2009, 09:31

Re: FTP-Client / Synapse

Beitrag von wolf_z »

@theo
Ich hab jetzt die Zeile aus deinem Kommentar rauskopiert und bei mir rein. Es klappt nicht! Wenn ich mit dem Debugger in die Funktion FtpGetFile reingehe, scheitert er wieder am Login:

Code: Alles auswählen

function FtpGetFile(...)
begin
...
if not Login then
   Exit;
...
end;

Merkwürdig. Jetzt versteh ich gar nichts mehr. :shock:

@Ralph
also schon tausendmal getestet. Mit Delphi (allerdings WinINet.dll) kein Problem.

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: FTP-Client / Synapse

Beitrag von theo »

wolf_z hat geschrieben:Merkwürdig. Jetzt versteh ich gar nichts mehr. :shock:


Meistens bis immer ist es dann doch eine Sicherheitssoftware die das verhindert.
WinInet ist vllt. zugelassen, aber deine Anwendung noch nicht.

Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

Re: FTP-Client / Synapse

Beitrag von Ralph59 »

Hallo,

läuft den ein Standard FTP Client Programm?
Ist es dein eigenes Netzwerk, oder mußt du über einen Proxi Server.
Hast Du ein Problem mit einer FireWall

Mit freundlichem Gruß

Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

wolf_z
Beiträge: 88
Registriert: Mo 31. Aug 2009, 09:31

Re: FTP-Client / Synapse

Beitrag von wolf_z »

Also ich hab von Synapse folgendes Release (Release.txt):
Release 38
2007-12-21
Ansonsten ganz normales Windows Vista mit FritzBox an Telekom überall Default-Einstellungen.

Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

Re: FTP-Client / Synapse

Beitrag von Ralph59 »

Hallo,

läuft den ein Standard FTP Client Programm? z.B. Filezilla oder andere?

Habe mir gerade das release runter geladen und auch getestet, bei mir läuft es.

Ich richte gerade einen kleinen TestServer Zugang für Dich ein, darauf kannst Du dann mal meinen Source code testen. Dauert jedoch noch einen kleinen Moment :wink:

Mit freundlichem Gruß

Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

wolf_z
Beiträge: 88
Registriert: Mo 31. Aug 2009, 09:31

Re: FTP-Client / Synapse

Beitrag von wolf_z »

Ich verwende auch Filezilla. Aber das ist nicht aktiv, wenn ich das Programm laufen lasse. Kannst Du mir mal die Units nennen, die Dein Testprogramm benutzt? Vielleicht gibt es da bei mir irgendwo durcheinander.

Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

Re: FTP-Client / Synapse

Beitrag von Ralph59 »

Hallo,

ich habe das komplette Programm gepostet (s.oben). Einfach eine Form mit 2 Buttun's, die Units stehen da auch.
Das einzige was du einfügen musst, sind die Zugangsdaten.

Ich brauche noch ca. 10min, dann habe ich einen Testzugang erstellt.

Mit freundlichem Gruß

Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

Re: FTP-Client / Synapse

Beitrag von Ralph59 »

Hallo Wolf_z,

hier kannst Du dir heute noch mein Testprogramm Downloaden, ich werde den Zugang jedoch morgen löschen.

ftp:erik:wolf_z@www.r-rothenbacher.de/Test/ftptest.zip

Bitte starte zuerst nur die Exe, um zu sehen, dass der Zugriff über synapse funktioniert.

Danach öffne die lpi datei und compiliere das Projekt und versuche es noch einmal.

Mit freundlichem Gruß

Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

Antworten