Mirar
Mitglied
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:
Und hier für die bessere Übersicht die Codestelle die für den Ordnerwechsel und die Ausgabe zuständig ist:
Ich hoffe ihr könnt mir helfen!
Danke im Voraus
Gruß Mirar
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:
Perl:
#!/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:
Perl:
$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ß Mirar