ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
695
695
EMPFEHLEN
-
Hallo Leute,
ich habe bei meinem Programm leider ein Problem. Es handelt sich bei dem Programm um eine Fernsteuerung für einen Server im Netzwerk über die Konsole. Das ganze ist in Perl geschrieben. Soweit funktioniert auch alles. Ich kann Befehle beim Client eingeben und der Server führt diese aus und schickt die Ausgabe zurück.
Ich will das ich wenn ich einen "cd ..." Befehl eingegeben habe, der Server mir alle VERZEICHNISSE im aktuellen Verzeichnis ausgibt. Und genau an der Stelle scheitert es. Das Verzeichnis wird zwar gewechselt aber statt der erwarteten Ausgabe bekomme ich folgendes:
readdir() attempted on invalid dirhandle DIR at ServerNeu.pl line 63, <GEN1> line 1.
closedir() attempted on invalid dirhandle DIR at ServerNeu.pl line 68, <GEN1> line 1.
Hier mal mein Code für den Server:
Code perl:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
#!/usr/bin/perl -w use strict; use IO::Socket; use Cwd; use File::Basename; my $port = $ARGV[0]; unless (defined($port)) { print "Geben Sie den Port an...\n"; $port = <STDIN>; } chomp($port); my $server = IO::Socket::INET->new( LocalPort => $port, Type => SOCK_STREAM, ReuseAddr => 1, Listen => 10 ) or die "Couldn't be a tcp server on port $port : $@\n"; print "Server started\n"; my $client = $server->accept( ); my $output; my $dir; my $directory; my $command; my $datei; while(1) { $command = <$client>; if(substr($command, 0, 3) eq "cd ") { $dir = substr($command, 3, length($command)); $dir =~ s/\n+$//; if(chdir($dir) == 1) { $output = "Changed directory"; } else { $output = "Couldn't change directory"; } $directory = cwd(); my $path = dirname($dir)."/".basename($dir); print "\nDirectories in this directory:\n"; opendir(DIR, $path); while($datei = readdir(DIR)) { if(-d $datei && $datei ne "." && $datei ne "..") { print $datei."\n" } } closedir(DIR); } elsif($command eq "end\n") { close($server); print "Shut down Server"; last; } else { $output = qx($command); } print $client $output."\nEOC\n"; }
Und hier für die bessere Übersicht die Codestelle die für den Ordnerwechsel und die Ausgabe zuständig ist:
Code perl:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
$command = <$client>; if(substr($command, 0, 3) eq "cd ") { $dir = substr($command, 3, length($command)); $dir =~ s/\n+$//; if(chdir($dir) == 1) { $output = "Changed directory"; } else { $output = "Couldn't change directory"; } $directory = cwd(); my $path = dirname($dir)."/".basename($dir); print "\nDirectories in this directory:\n"; opendir(DIR, $path); while($datei = readdir(DIR)) { if(-d $datei && $datei ne "." && $datei ne "..") { print $datei."\n" } } closedir(DIR); }
Ich hoffe ihr könnt mir helfen!
Danke im Voraus
Gruß MirarMan kann niemanden überholen, wenn man in seine Fußstapfen tritt...
-
26.01.12 16:04 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Es gibt ein extra Forum für Perl Fragen => http://www.tutorials.de/cgi-perl-pyt...y-power-shell/
Du solltest grundsätzlich prüfen ob opendir erfolgreich war. Offenbar hat das nicht geklappt...
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Guten Morgen,
ich hab den Code jetzt angepasst und bekomme dann auch gesagt das es nicht geklappt hat. Aber wieso hat es nicht geklappt? Im Internet lese ich immer nur DIR ist kein Filehandle. Was soll das heißen? Es ist doch soweit ich weiß egal was ich da hinschreibe!?
Gruß MirarMan kann niemanden überholen, wenn man in seine Fußstapfen tritt...
-
27.01.12 09:01 #4
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
error: could not open C:\Dokumente und Einstellungen\User\Desktop\Spielwiese
Ja das ist definitiv ein Pfad und die Leserechte besitzt er auch.Man kann niemanden überholen, wenn man in seine Fußstapfen tritt...
-
27.01.12 16:25 #6
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
Ähnliche Themen
-
Mit Perl Verzeichnisinhalt auslesen und in txt Datei schreiben!
Von psifactory im Forum CGI, Perl, Python, Ruby, Power ShellAntworten: 1Letzter Beitrag: 31.05.08, 15:32 -
Verzeichnisinhalt durchsuchen
Von Eiszwerg im Forum PHPAntworten: 4Letzter Beitrag: 12.11.06, 20:04 -
Verzeichnisinhalt auslesen!
Von Fxice im Forum PHPAntworten: 2Letzter Beitrag: 09.06.05, 16:07 -
[c++] Verzeichnisinhalt löschen
Von biba im Forum C/C++Antworten: 1Letzter Beitrag: 29.04.03, 08:56 -
Verzeichnisinhalt SORTIERT ausgeben
Von b0nzai im Forum PHPAntworten: 4Letzter Beitrag: 19.03.02, 17:22





Zitieren

Login





