Thread Net::FTP - Verbindung prüfen - Skript blockiert
(10 answers)
Opened by meier19 at 2009-03-26 17:35
Ich möchte den Bestand einer Ftp-Verbindung in Abständen überprüfen. Der Zweck besteht darin, bei Abbruch der Internet-Verbindung dies in der grafischen Benutzeroberfläche eines Programms anzuzeigen. Für diese Überprüfung wird das aktuelle Verzeichnis vom Server abgerufen, was funktioniert, solange die Netzwerk-Verbindung besteht. Wird die Netzwerkverbindung jedoch unterbrochen, so steht das Skript still (und eine allfällige grafische Benutzeroberfläche blockiert), und es wird nicht die dafür vorgesehene Fehlermeldung ausgegeben. Wird die Netzwerkverbindung wieder hergestellt, so läuft das Skript einwandfrei weiter.
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #!/usr/bin/perl use strict; use warnings; # Modul einbinden use Net::FTP; # Ftp-Verbindung herstellen my $ftp = Net::FTP -> new ("<SERVER>") or warn "Fehler: Nicht verbunden."; $ftp -> login ("<BENUTZERNAME>", "<PASSWORT>") or warn "Fehler: Nicht eingeloggt."; # Bestand der Ftp-Verbindung während 10 Sekunden nach jeder Sekunde überprüfen for(1...10) { my $test = $ftp -> pwd or warn "Fehler: Konnte Verzeichnis nicht anzeigen."; # my $test = Net::FTP -> new ("<SERVER>") or warn "Fehler: Nicht verbunden."; print $test . "\n"; sleep 1; } Wird zur Überprüfung nicht das aktuelle Verzeichnis abgerufen, sondern nach jeder Sekunde eine neue Verbindung hergestellt, so kann der Fehler abgefangen werden (wozu im Codebeispiel die Auskommentierung der Zeile 16 aufzuheben und die Zeile 15 auszukommentieren sind). Damit aber würde das Zustandekommen einer neuen Verbindung geprüft und nicht der Bestand der vorher hergestellten Verbindung. Wie kann der Fehler zur bestandenen Verbindung abgefangen werden? Der Mensch schöpft seine Gesetze nicht aus der Natur, sondern schreibt sie dieser vor (Immanuel Kant).
|