Thread Fehlerfreie Übertragung einer Datei
(74 answers)
Opened by
ITobiI
at 2015-09-15 17:14
User since 2015-09-10
70
Artikel
BenutzerIn
Hi, ich schon wieder. Als mir wurden folgende Fehlermeldungen ausgegeben:
-------------------Client-----------
Use of uninitialized value $end_usec in subtraczion (-) at root/.../UDP_Client.pl line 112.
Use of uninitialized value $end_sec in subtraczion (-) at root/.../UDP_Client.pl line 112.
-------------------Server-----------
Use of uninitialized value $VerzPfad in concatenation (.) or string at root/.../UDP_Server.pl line 90.
Use of uninitialized value $VerzPfad in concatenation (.) or string at root/.../UDP_Server.pl line 90.
ERROR chdir ".Verzeichnis_B" (No such file or directory)
Hier die aktuellen Skripte:
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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
#!/usr/bin/perl -w
#UDP_Server.pl
#Hartych, Tobias EIT 4056051 #Dreißig, Tobias EIT 40?????
#Module importieren use strict 'vars'; #strict macht debugging einfacher use warnings;
use IO::Socket::INET;#Modul wird benoetigt um Netzwerkfunktionen zu nutzen
#auto-flush $| = 1;
#Variablen deklarieren my ($end,$socket,$peer_address,$peer_port,$n,$i,$Anzahl_Elemente,$Sende_erneut,$Bestaetigung,$checksum_Client,$checksum_Server); my ($VerzPfad,$strAblageVer,$dateien,$strVerzeichnis,$daten); my (@data,@sortdata);
my $ip = $ARGV [0] || "127.0.0.1"; #erste Paramenter wird in $ipaddr eingespeichert my $port = $ARGV [1] || "9999"; #zweite Paramenter wird in $ipaddr eingespeichert
#Socket erschaffen zur Kommunikation mit Client $socket=new IO::Socket::INET ( LocalHost =>$ip,#LocalHost von $socket ist eingegebener Paramenter $ip LocalPort=>$port,#LocalPort von $sock ist eingegebener Paramenter $port Proto=>'udp'#Transportprotokoll: UDP ); die "Konnte keine Verbindung herstellen: $!\n" unless $socket; #wenn fehlgeschlagen dann schließen
print "UDP Server bereit und wartet auf eine Verbingung mit Port $port\n";
#Hauptschleife while(1) #do { #Empfange Prüfsumme von Client $socket->recv($checksum_Client,1024); #definiere ip $peer_address = $socket->peerhost(); #definiere port $peer_port = $socket->peerport();
#Empfange und überprüfe Daten do { #Bestätige nicht erfolgreiches Senden $Bestaetigung = 0; $socket->send($Bestaetigung);
$socket->recv($daten,1024);
#Bilde Prüfsumme nach Empfang der Daten $checksum_Server = unpack ("%16C*", $daten); } while ($checksum_Client != $checksum_Server);
#Bestätige erfolgreiches Senden $Bestaetigung = 1; $socket->send($Bestaetigung);
$strVerzeichnis = "Verzeichnis_A"; $strAblageVer = "Verzeichnis_B";
#Wandle String in Array um @data = join(", ", $daten);
#Kopieren use File::Copy; foreach $dateien (@data) { copy($strVerzeichnis.'/'.$dateien,$strAblageVer.'/'.$dateien); }
chdir($VerzPfad.$strAblageVer) or die (qq#ERROR chdir "$VerzPfad.$strAblageVer" ($!)\n#); #line 90
#Entpacke foreach $dateien (@data) { system("/usrbin/unzip", $VerzPfad.$strAblageVer.'/'.$dateien) == 0 or die "Systemfehler: $?"; #zip-Dateien löschen unlink($VerzPfad.$strAblageVer.'/'.$dateien); }
@sortdata = sort @data;
#Gib Datei aus print join(",",@sortdata);
#Abfrage ob Programm beenden print "Wenn Programm durchgeführt werden soll dann bitte j eingeben, ansonsten beliebiges anderes Zeichen eingeben\n"; $end = <STDIN>; } #while($end = 'j');
#Schließe Socket $socket -> close();
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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
#!/usr/bin/perl -w
#UDP_Client.pl
#Hartych, Tobias EIT 4056051 #Dreißig, Tobias EIT 40?????
use Time::HiRes qw(gettimeofday);
#Module importieren #strict macht debugging einfacher use strict 'vars'; use warnings;
#Modul wird benoetigt um Netzwerkfunktionen zu nutzen use IO::Socket::INET;
#auto-flush $| = 1;
#Variablen deklarieren my ($socket,$ip,$port,$end,$start_sec,$start_usec,$end_sec,$end_usec,$timeDelta,$checksum_Client); my ($Anzahl_Elemente,$block,$fh,$Sende_erneut,$DIR,$zip,$fileName,$daten,$Bestaetigung); my (@data); $ip = $ARGV [0] || "127.0.0.1"; #erster Paramenter wird in $ipaddr eingespeichert $port = $ARGV [1] || "9999"; #zweiter Paramenter wird in $ipaddr eingespeichert
#Socket erschaffen zur Kommunikation mit Server $socket=new IO::Socket::INET ( PeerAddr=>$ip, #PeerAddr von $sock ist eingegebener Paramenter $ipaddr PeerPort=>$port, #PeerPort von $sock ist eingegebener Paramenter $port Proto=>'udp' #Transportprotokoll: UDP );
die "Konnte keine Verbindung herstellen: $!\n" unless $socket;
print "Mit $ip verbunden !\n";
#Hauptschleife #do while(1) { use Archive::Zip; $zip = Archive::Zip->new(); $DIR = "/root/Documents/Socket-Programmierung_2/Datei"; opendir(DIR,$DIR) or die "Kann aktuelles Verzeichnis nicht oeffnen: $!\n"; @data = readdir(DIR) or die "Kann Verzeichnis nicht lesen:$!\n";
foreach $fileName (@data) { if ($fileName =~ /.txt/ ) { $zip->addFile($fileName); } } $zip->writeToFileNamed("result.zip");
#Datei Array einlesen und sicherstellen das Datenpakete gleich groß sind open ($fh,'<:raw','result.zip') or die ("ERROR OPEN result.zip ($!)\n"); while (read($fh,$block,1024)) { push(@data,$block); }
#Wandle Array in String um $daten = join(", ", @data);
#Prüfsumme ermitteln $checksum_Client = unpack ("%16C*", $daten);
#Prüfsumme an Server senden $socket->send($checksum_Client, 1024);
$Bestaetigung = 0;
#Startzeit setzen ($start_sec, $start_usec) = gettimeofday();
while($Bestaetigung == 0) { #Bestaetigung senden $socket->recv($Bestaetigung,1024);
if($Bestaetigung == 0) { #sende Datenpakete zu Server $socket->send($daten); } }
#Endzeit setzen ($start_sec, $start_usec) = gettimeofday();
#Sendezeit ermitteln $timeDelta = ($end_usec - $start_usec)/1000 + ($end_sec - $start_sec)*1000; #line 112 print "Die Sendezeit betraegt: $timeDelta ms\n";
#Abfrage ob Programm beenden print "Wenn Programm durchgeführt werden soll dann bitte j eingeben, ansonsten beliebiges anderes Zeichen eingeben\n"; $end = <STDIN>; } #while($end eq 'j');
#Schließe DIR close (DIR);
#Schließe Socket $socket -> close();
View full thread Fehlerfreie Übertragung einer Datei
|