Entwickler-Ecke
Internet / Netzwerk - idFTP: Programmfreeze vermeiden
delphiuserno1 - Mi 19.09.07 17:00
Titel: idFTP: Programmfreeze vermeiden
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:
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 - Mi 19.09.07 17:05
IdAntiFreeze
delphiuserno1 - 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 - Sa 22.09.07 00:43
Titel: Re: idFTP: Programmfreeze vermeiden
Moin!
delphiuserno1 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:
delphiuserno1 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 [
http://www.delphi-forum.de/topic_ICMPEchoAPI+quotPingquot+WrapperUnit_53259.html], die ohne Admin-Rechte auskommt.
delphiuserno1 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!