AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi idFTP erhängt sich nach einer halben Stunde
Thema durchsuchen
Ansicht
Themen-Optionen

idFTP erhängt sich nach einer halben Stunde

Ein Thema von Admirandis · begonnen am 22. Dez 2008 · letzter Beitrag vom 23. Dez 2008
Antwort Antwort
Seite 1 von 2  1 2      
Admirandis
(Gast)

n/a Beiträge
 
#1

idFTP erhängt sich nach einer halben Stunde

  Alt 22. Dez 2008, 21:54
Hallo und frohe Weihnachten zusammen!

Ich schreibe ein kleines Filesharingprogramm und hab ein kleines Problem mit der IndyKompo. Grundsätzlich funktioniert alles, aber nach ziemlich genau nach einer halben Stunde läuft das Log nicht weiter (Verbinde immer wieder und trenne die Verbindung dann wieder) und wenn man auf irgendeinen Button drückt erhängt sich das Programm...

Ich hab ehrlich gesagt, keine Ahnung, wo der Fehler liegt, aber wäre sehr dankbar, wenn mir jemand weiterhelfen könnte!

Mfg Admirandis
Angehängte Dateien
Dateityp: zip idftp_184.zip (27,9 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: idFTP erhängt sich nach einer halben Stunde

  Alt 22. Dez 2008, 22:24
hast du mal Pause gedrückt und geschaut an welcher Stelle er hängt?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#3

Re: idFTP erhängt sich nach einer halben Stunde

  Alt 22. Dez 2008, 22:42
Ich würds mir ja mal ansehen, aber da es ohne JVCL nicht geht, werd ich mir das auch nicht ansehen.
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

Re: idFTP erhängt sich nach einer halben Stunde

  Alt 22. Dez 2008, 23:47
um die verbindung zu nem ftp server aufrecht zu erhalten gibt es denn noop (mein ich zumindest das der so heißt ^^) befehl... probiers doch damit mal
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Admirandis
(Gast)

n/a Beiträge
 
#5

Re: idFTP erhängt sich nach einer halben Stunde

  Alt 23. Dez 2008, 08:32
@Andidreas: Mit dem Noop hab ichs grad probiert, aber da erhängt er sich noch schneller! Nichtmal 1,5 min! Vorher hab ich ja immer connected und wieder disconnected! Wobei das mit dem Noop schöner wäre...

@Muhkuh: Hier ist der intressante Part:

Delphi-Quellcode:
procedure TForm1.threadRun(Sender: TIdThreadComponent);
var
 zefux: String;
 cnt: integer;
begin

if JvHLEditor1.Lines.Count > 15 then
    JvHLEditor1.Clear; // Das ist nur ein Log von mir; hat nix mit der Funktion zu tun!

ak.Host := 'werdasliestistdoof.com';
ak.Username := 'angela';
ak.Password := 'merkel';

  while ak.Connected = false do
    begin
      ak.Connect;
      ak.ChangeDir('officeclipper');
      JvHLEditor1.Lines.Add('connected @ '+timetostr(now)); //Daten ins Log
    end;

ak.List(listbox1.Items, '', false);


if ((listbox1.Items.IndexOf(you) <> -1) and (hinti = false)) then
    begin
        hinti := true;
    end;

if listbox1.Items.IndexOf(you) <> -1 then
    begin
        download := true;
    end;

if upload = true then
    begin
        noti.Hide;
        progi.Show;
        form1.Caption := 'Uploading';
        JvTrayIcon1.BalloonHint('Upload', 'Sie laden jetzt eine Datei hoch xD', btInfo, 5000, true);
        richi.Lines.SaveToFile('C:\'+me);

        if listbox1.Items.IndexOf(me) <> -1 then
            ak.Delete(me);

        ak.Put('C:\'+me, me+'up', true);
        ak.Rename(me+'up', me);
        upload := false;
        form1.Caption := 'Upload succesful!';
        richi.Clear;
        progi.Hide;
        noti.Show;
    end;

if download = true then
    begin
        noti.Hide;
        progi.Show;
        form1.Caption := 'Downloading';
        JvTrayIcon1.BalloonHint('Download', 'Es wird eine Datei heruntergeladen', btInfo, 5000, true);
        ak.Get(you, 'C:\'+you, true);
        ak.Delete(you);
        richi.Lines.LoadFromFile('C:\'+you);
        download := false;
        richi.SelectAll;
        richi.CopyToClipboard;
        form1.Caption := 'Download succesful!';
        hinti := false;
        zefux := richi.text;
        if length(zefux) < 5 then
          zefux := 'Datei wurde heruntergeladen und ist im Clipboard!';
        progi.Hide;
        noti.Show;
        JvTrayIcon1.BalloonHint('Clipboard', zefux, btInfo, 5000, true);
    end;

if delall = true then
    begin
        for cnt := 0 to listbox1.Count-1 do
            ak.Delete(listbox1.items[cnt]);
        showmessage('Server ist wieder clean ;-)');
    end;


{    while ak.Connected = true do
    ak.disconnect;  }


ak.Noop; // Vorher hab ich den Client wieder disconnected (s.o.). Der Noop klappt blöderweise auch net!

JvHLEditor1.Lines.Add('refreshed @ '+timetostr(now)) // Und wieder was für das Log ;-)

end;
Viele Grüße

Admirandis
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: idFTP erhängt sich nach einer halben Stunde

  Alt 23. Dez 2008, 08:56
Guten Morgen,

wozu ist denn diese Schleife gut?

Delphi-Quellcode:
  while ak.Connected = false do
    begin
      ak.Connect;
      ak.ChangeDir('officeclipper');
      JvHLEditor1.Lines.Add('connected @ '+timetostr(now)); //Daten ins Log
    end;
Wäre es nicht besser:

Delphi-Quellcode:
  if not ak.Connected then
    begin
      ak.Connect;
      ak.ChangeDir('officeclipper');
      JvHLEditor1.Lines.Add('connected @ '+timetostr(now)); //Daten ins Log
    end;
Und noch zweie kleine Anmerkung, man sollte nicht auf = true oder = false
prüfen.

Zugriffe auf GUI (VCL) Elemente sollten synchronisiert erfolgen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Admirandis
(Gast)

n/a Beiträge
 
#7

Re: idFTP erhängt sich nach einer halben Stunde

  Alt 23. Dez 2008, 09:00
Zitat von Klaus01:
wozu ist denn diese Schleife gut?
Ich hab nur die Erfahrung gemacht, dass der Indy nicht immer sofort verbindet. Und falls eventuell mal ein Fehler auftritt, hab ich das so gleich sicher umgangen. Kann man aber auch anders machen!


Zitat von Klaus01:
Und noch eine kleine Anmerkung, man sollte nicht auf = true oder = false prüfen.
Ok, nicht das Problem, aber hat das auch einen Hintergrund?


Zitat von Klaus01:
Zugriffe auf GUI (VCL) Elemente sollten synchronisiert erfolgen.
Was genau meinst du damit?

Grüße Admirandis
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: idFTP erhängt sich nach einer halben Stunde

  Alt 23. Dez 2008, 09:21
Zitat von Admirandis:
Zitat von Klaus01:
Und noch eine kleine Anmerkung, man sollte nicht auf = true oder = false prüfen.
Ok, nicht das Problem, aber hat das auch einen Hintergrund?
Es macht den Code lesbarer und wartbarer.

Zitat von Admirandis:
Zitat von Klaus01:
Zugriffe auf GUI (VCL) Elemente sollten synchronisiert erfolgen.
Was genau meinst du damit?
Die GUI bzw. die VCL Elemente sind nicht threadsave, d.h.
es kann zu Zugriffsverletzungen kommen wenn aucs einem Thread auf
die GUI zugegriffen wird.
Du kannst mal hier im Forum nach synchronize suchen - Du wirst
dann einige Beispiele finden.

Wäre es eventuell nich sinnvoller das Design zu ändern?

z.b.
soll eine Datei geladen werden - wird ein download thread gestartet
soll eine Datei hochgeladen werden - wird ein uploadthread gestartet.
Also zwei Threads, einer für den DownLoad und einer für den Upload.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#9

Re: idFTP erhängt sich nach einer halben Stunde

  Alt 23. Dez 2008, 09:23
Zitat von Admirandis:
Zitat von Klaus01:
wozu ist denn diese Schleife gut?
Ich hab nur die Erfahrung gemacht, dass der Indy nicht immer sofort verbindet. Und falls eventuell mal ein Fehler auftritt, hab ich das so gleich sicher umgangen. Kann man aber auch anders machen!
Soweit ich weiß, arbeiten die Indys blockierend, das heißt, dass Dein Programm erst weiter macht, wenn Connect erfolgreich (oder auch nicht) abgearbeitet wurde.

Ich würde mehr das hier vorschlagen:

Delphi-Quellcode:
try
  ak.Connect;
except
  on E: Exception do
    raise Exception.Create(E.Message); // kleine Fehlerbehandlung
end;

if ak.Connected then
  // Weitermachen mit dem restlichen Code
Zitat von Admirandis:
Zitat von Klaus01:
Und noch eine kleine Anmerkung, man sollte nicht auf = true oder = false prüfen.
Ok, nicht das Problem, aber hat das auch einen Hintergrund?
Ja, hat es
  Mit Zitat antworten Zitat
Admirandis
(Gast)

n/a Beiträge
 
#10

Re: idFTP erhängt sich nach einer halben Stunde

  Alt 23. Dez 2008, 09:30
@Klaus: Anfangs hatte ich die ganze idFTP-Kompo auch erst während der Laufzeit erstellt (Womit das synchronisieren wegfallen sollte), aber da wusste ich nicht, wie ich an die Daten für die Progressbar(AWorkCount etc.) komme... Wenn du mir sagst, wie ich das bewerkstellige wäre ich überglücklich =)

@Muhkuh: Ok, klingt logisch; werd das gleich mal ausprobieren! Und danke für den Link. Man lernt nie aus

Grüße Admirandis
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz