Autor Beitrag
delphiuserno1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82


Delphi 7 enterprise, Delphi 2007
BeitragVerfasst: Mi 19.09.07 17:00 
Hi

Ich hab n Problem mit der idFTP Komponente. und zwar soll der eine Datei von einem FTP Server downloaden. wenn allerdings keine Internetverbindung besteht oder die Firewall das Programm blockt, dann friert das Programm kurzzeitig ein wenn der befehl

idftp1.connect;

ausgeführt wird. Es kommt ne socket fehlermeldung die ich auch abfange und so nur das Programm soll nicht einfrieren!
Gibt es da ne Lösung für? Ich hab das selbe mal mit der Indy FTP demo probiert, doch das friert auch ein für ne kurze zeit (2-3sec).

Ich hab mal hier im forum n bisschen gesucht und hab diesen code mal getestet:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function isHostAvailable(Host:String):boolean;
  var
     MS: Integer;
    ICMP: TidIcmpClient;
  begin
    ICMP:= TidICMPClient.Create(nil);
    result:= False;
    ICMP.Host:= host;
    ICMP.Ping;
    MS:=ICMP.ReplyStatus.MsRoundTripTime;
    result:= ICMP.ReplyStatus.ReplyStatusType <> rsTimeOut;
    ICMP.Free;
  end;


Allerdings scheint Indy10 "ICMP.ReplyStatus" nicht zu kennen. keine ahnung wieso. (hab Delphi 2007)

Also wäre super wenn mir jemand helfen kann. ich muss irgendwie die verfügbarkeit des hostes prüfen ohne das das programm einfriert!

Gruß
-Luzifer
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mi 19.09.07 17:05 
IdAntiFreeze
delphiuserno1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82


Delphi 7 enterprise, Delphi 2007
BeitragVerfasst: Mi 19.09.07 17:47 
muss ich da noch irgendetwas aufrufen? weil nur das teil auf die form legen klappt nich obwohl es active is...
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 22.09.07 00:43 
Moin!

user profile icondelphiuserno1 hat folgendes geschrieben:
Ich hab n Problem mit der idFTP Komponente. und zwar soll der eine Datei von einem FTP Server downloaden. wenn allerdings keine Internetverbindung besteht oder die Firewall das Programm blockt, dann friert das Programm kurzzeitig ein wenn der befehl

idftp1.connect;

ausgeführt wird. Es kommt ne socket fehlermeldung die ich auch abfange und so nur das Programm soll nicht einfrieren!
Gibt es da ne Lösung für?

Ja, die Einfachste ist, deinen Download-Code in einen eigenen Thread auszulagern! :idea:

user profile icondelphiuserno1 hat folgendes geschrieben:
Ich hab mal hier im forum n bisschen gesucht und hab diesen code mal getestet:function isHostAvailable(Host:String):boolean;

Mal zur Erläuterung: das ist praktisch ein Ping an diesen Host. Damit kannst du feststellen, ob der Host im Netzwerk erreichbar ist oder nicht. Allerdings ist der Indy-basierte Ping nicht soo toll, denn er setzt Admin-Rechte voraus, weil die Indy-Entwickler dafür auf RawSockets aufgesetzt haben. Es gibt hier eine Alternative, die ohne Admin-Rechte auskommt.

user profile icondelphiuserno1 hat folgendes geschrieben:
ich muss irgendwie die verfügbarkeit des hostes prüfen ohne das das programm einfriert!

Grundsätzlich liefert ein Ping zwar die Info, ob der Host erreichbar ist, aber deshalb muss ein FTP-Connect noch lange nicht erfolgreich sein! :mahn:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.