#!/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 = ; #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 = ; } #Schließe Datei close (DIR); #Schließe Socket $socket -> close();