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, also ich hab es jetzt so weit hinbekommen das keine Fehler mehr angezeigt werden. Allerdings wird die Hauptschleife einfach durchlaufen ohne das etwas gemacht wird, bis auf die Abfrage ob das Programm beendet werden soll. Hier die aktuellen Scripte:
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
#!/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); my ($Dateien,$VerzPfad,$strAblageVer,$dateien,$strVerzeichnis); 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";
#Abfrage ob Programm beenden print "Wenn Programm durchgeführt werden soll dann bitte j eingeben, ansonsten beliebiges anderes Zeichen eingeben\n"; $end = <STDIN>;
#Hauptschleife while($end eq "j") { #definiere ip $peer_address = $socket->peerhost(); #definiere port $peer_port = $socket->peerport();
#Empfange Anzahl der zu sendenden Elemente $socket->recv($Anzahl_Elemente,1024);
#Empfange Daten von Client $socket->send($_) for (@data);
#Empfange und überprüfe Daten while ($Anzahl_Elemente != @data) { $Sende_erneut = 1; $socket->send($Sende_erneut);
#Empfange Anzahl der zu sendenden Elemente $socket->recv($Anzahl_Elemente,1024); } $strVerzeichnis = "Verzeichnis_A"; $strAblageVer = "Verzeichnis_B";
#Kopieren foreach $dateien (@data) { copy($strVerzeichnis.'/'.$dateien,$strAblageVer.'/'.$dateien); }
chdir($VerzPfad.$strAblageVer) or die (qq#ERROR chdir "$VerzPfad.$strAblageVer" ($!)\n#);
#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>; }
#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
#!/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); my ($Anzahl_Elemente,$block,$fh,$Sende_erneut,$DIR,$zip,$fileName); 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";
#Abfrage ob Programm beenden print "Wenn Programm durchgeführt werden soll dann bitte j eingeben, ansonsten beliebiges anderes Zeichen eingeben\n"; $end = <STDIN>;
#Hauptschleife while ($end eq "j") { 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); }
#Laenge des Array festlegen $Anzahl_Elemente = @data;
#Laenge des Array an Server senden $socket->send($Anzahl_Elemente, 1024);
$Sende_erneut = 0;
#Startzeit setzen ($start_sec, $start_usec) = gettimeofday();
while($Sende_erneut == 1) { #sende Datenpakete zu Server $socket->send($_) for (@data);
#überprüfe ob Server Daten erhalten hat $socket->recv($Sende_erneut,1024);
#Endzeit setzen ($start_sec, $start_usec) = gettimeofday(); } #Sendezeit ermitteln $timeDelta = ($end_usec - $start_usec)/1000 + ($end_sec - $start_sec)*1000; print "Die Sendezeit betraegt: $timeDelta ms";
#Abfrage ob Programm beenden print "Wenn Programm durchgeführt werden soll dann bitte j eingeben, ansonsten beliebiges anderes Zeichen eingeben\n"; $end = <STDIN>; } #Schließe Datei close (DIR);
#Schließe Socket $socket -> close();
View full thread Fehlerfreie Übertragung einer Datei
|