FTP-Client / Synapse

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

Re: FTP-Client / Synapse

Beitrag von wolf_z »

Also erstmal vielen Dank für Deine Mühe. Ihr nehmt Euch ja soviel Zeit für meine Probleme! Dank auch an theo.

Also Deine Exe funktioniert tatsächlich! Aber wenn ich das Programm kompiliere, habe ich wieder das gleiche Problem. Es kommt nicht über das login weg. Und Du hast ja Deine Synapse-Bibliothek und Projekt bzw. Compilereinstellungen mitgeliefert!

Also muss es wohl irgendwie an meiner Rechner-Konfiguration liegen. Am wahrscheinlichsten erscheint mir jetzt, weil ich Vista64 verwende. Und deshalb habe ich auch Lazarus für x86_64-win64 installiert.

Übrigens verwende ich Lazarus 0.9.26.2 (Beta) und FPC 2.2.2. Ich kann probeweise auch noch mal Lazarus 0.9.26 installieren. Ich werde wohl auch nochmal Lazarus i386-win32 installieren und alles damit durchspielen. Diese Strategie war aber mindestens bei meinem cl32.dll-Problem nicht erfolgreich (anderer Thread) . Aber vielleicht hilft's ja hier. Ansonsten habe ich auch noch einen XP Win32 Rechner hier rumstehen. Da kann ich es ja auch mal versuchen.

Wenn noch jemand Ideen hat, immer her damit :)

Nochmal vielen Dank und schönes Wochenende erst mal.

Wolfgang

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 »

Also wolf_z,

ich verwende die gleichen Versionen Lazarus 0.9.26.2 (Beta) und FPC 2.2.2.

Am Rechner selber kann es erst einmal auch nicht liegen, da die exe ja lief.
Wie hattest Du den Synapse in dein Projekt eingebunden?

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 habe an den Projekteinstellungen von Deinem Projekt nichts geändert. Demnach habe ich 'synapse_x', also von Dir, eingebunden.

Ich bin heute morgen mal Schritt für Schritt durch das Programm von theo gegangen und merkwürdig, wenn ich wirklich jeden einzelnen Schritt mit dem Debugger durchlaufe, funktioniert es! Kritisch scheint vor allem folgende Funktion in 'ftpsend' zu sein:

Code: Alles auswählen

function TFTPSend.ReadResult: Integer;
var
  s, c: string;
begin
  FFullResult.Clear;
  c := '';
  repeat
    s := FSock.RecvString(FTimeout);
    if c = '' then
      if length(s) > 3 then
        if s[4] in [' ', '-'] then
          c :=Copy(s, 1, 3);
    FResultString := s;
    FFullResult.Add(s);
    DoStatus(True, s);
    if FSock.LastError <> 0 then
      Break;
  until (c <> '') and (Pos(c + ' ', s) = 1);
  Result := StrToIntDef(c, 0);
  FResultCode := Result;
end;


In der Variablen s wird die Antwort der Servers zurückgegeben, übrigens ausgeschrieben z.B. "erwarte Passwort" oder so ähnlich und irgendwelchen Erfolgsstatusmeldungen, z.B. "220" (Welcome). Wenn ich aber die Kommandos, z.B. "x := FTPCommand('xy');" im Debugger durchlaufen lasse, scheitert der Befehl.

Übrigens auch, wenn ich das Programm ohne Lazarus starte. Also irgendein Timer bzw. Synchronisier-Problem, weil mein Rechner vielleicht zu schnell ist :mrgreen: , kann es auch nicht sein, weil Dein compiliertes Programm ja funktioniert.

Ein weiterer Ansatz scheint mir zu sein, dass auf meinem Rechner vielleicht irgendwelche dll anders sind (Windos Vista). Ich habe mir die Units mal angeschaut. in synsock z.B. gibt es folgende Direktiven

Code: Alles auswählen

...
 
{$IFDEF WIN32}
  {$I sswin32.pas}
{$ELSE}
  {$IFDEF FPC}
    {$I ssfpc.pas}
  {$ELSE}
    {$I sslinux.pas}
  {$ENDIF}
{$ENDIF}             
 
...


und dann werden in sswin32.inc folgende dll verwendet:

Code: Alles auswählen

...
  {$IFDEF WINSOCK1}
    DLLStackName = 'wsock32.dll';
  {$ELSE}
    DLLStackName = 'ws2_32.dll';
  {$ENDIF}
  DLLwship6 = 'wship6.dll'
...


Also werden bei mir mindestens die dll's 'ws2_32.dll und wship6.dll verwendet. Aber dass es daran liegen könnte, dagegen spricht ja wieder, dass Dein compiliertes Programm bei mir läuft.

Es sei denn - nächste Theorie -, irgendwelche Compiler-Direktiven sind defaultmäßig anders eingestellt. Da ich ja die Flags auf 'WIN64' und 'x86_64' stehen habe, weil ich die Lazarus Windows64 Version vewende und deshalb WIN32 unter "Compilereinstellungen / Andere" als '-dWIN32' eintragen muss (auch bei Deinem Programm, sonst kann ich es nicht compilieren). Damit könnte das Problem irgendwie mit einer unterschiedlichen Steuerung durch die Direktiven zusammenhängen. Aber dagegen spricht wieder, dass es ja im "Schritt für Schritt"-Debugging funktioniert.

Rätsel über Rätsel. Werde über's Wochenende immer mal wieder sporadisch der Sache nachgehen.

Nachtrag: Hier noch meine Compiler-Einstellungen:

Code: Alles auswählen

-MObjFPC -Sgi -O1 -gl -WG -vewnhi -l -Fusynapse_x\ -Fu..\..\..\..\..\..\..\..\lazarus\lcl\units\x86_64-win64\ -Fu..\..\..\..\..\..\..\..\lazarus\lcl\units\x86_64-win64\win32\ -Fu..\..\..\..\..\..\..\..\lazarus\packager\units\x86_64-win64\ -Fu. -oproject1.exe -dWIN32 -dLCL -dLCLwin32

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,

zuerst einmal, ich lasse den Zugang noch bis morgen stehen.

Hier meine Compilereinstellungen für dieses Projekt:

-MObjFPC -Sgi -O1 -gl -WG -vewnhi -l -Fusynapse_x\ -Fu..\..\..\lcl\units\i386-win32\ -Fu..\..\..\lcl\units\i386-win32\win32\ -Fu..\..\..\packager\units\i386-win32\ -Fu. -oproject1.exe -dLCL -dLCLwin32


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 habe Dein Programm mit den Verbindungsdaten von theos FTP-Server versehen und damit geht es auch. Und theos Lazarus-Forum-Server hält wahrscheinlich noch etwas länger! Du kannst deinen Account also gerne löschen. Vielen Dank nochmal!

Ich kriege dann im Debugger-Modus übrigens herrliche Handshakes, wenn ich noch
aFTP.DSock.OnStatus := OnDataStatus;
aFTP.OnStatus := OnMainStatus; :
hinzufüge!

Code: Alles auswählen

>USER anonymous
>PASS guest
>TYPE I
>STRU F
>MODE S
>REST 0
>REST 1
>REST 0
350 Restart position accepted (0).
>CWD /
>TYPE A
>EPSV 1
progress: 0
progress: 0
progress: 0
progress: 0
progress: 0
>LIST /pub/fpc/snapshot/fixes/source/
progress: 202
progress: 202
progress: 202
progress: 202
progress: 202
>QUIT
221 Goodbye.


Funktioniert aber nur StepByStep im Debugger :?

Ich werde als nächstes wohl mal 'ne saubere Lazarus-Win32-Installation neu aufsetzen. Zunächst mal auf meiner alten Win32/XP-Gurke und dann nochmal auf Win64/Vista.

Gruß Wolfgang

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 »

Ist wohl erst einmal eine gute Idee.
Bin gerade etwas beschäftigt, schaue aber immer mal wieder rein.


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 »

Es funktioniert :)

Habe mein Lazarus für win64 komplett deinstalliert und das für win32 neu installiert auf meinem Vista/64 System! Mein Lazarus hat jetzt folgende Versions-Info:

v0.9.26.2 r18980 i386-win32-win32/win64

Das analoge Win64-Lazarus ist wohl noch nicht ganz ausgereift.

Nochmal Danke für die Unterstützung allerseits.

Wolfgang

Ergänzung: Falls noch jemand zum Testen OnDataStatus und OnMainStatus braucht:

Code: Alles auswählen

var readcount:integer; msgStr:string;
 
procedure TForm1.OnDataStatus(Sender: TObject; Reason: THookSocketReason; const Value: string);
begin
  if Reason = HR_ReadCount then readcount := readcount + StrToInt(Value);
  Log.Lines.Add('progress: ' + intToStr(readcount));
  // Synchronize(ShowProgress);
end;
 
procedure TForm1.OnMainStatus(Sender: TObject; Response: Boolean; const Value: string);
begin
  if Response then
     msgStr := '<' + Value
  else
     msgStr := '>' + Value;
  Log.Lines.Add(msgStr);
  // Synchronize(ShowInfo);
end;
Zuletzt geändert von wolf_z am Mo 21. Sep 2009, 11:53, insgesamt 1-mal geändert.

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,

:P da bin ich aber froh, ich habe auch schon angefangen nicht mehr weiter zu wissen, bin ja auch nur ein Anfänger / Wiedereinsteiger.

Mit freundlichem Gruß

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

Antworten