#!/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 @name;
$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 qw(:ERROR_CODES:CONSTANTS);
$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 (DATEI);
#Schließe Socket
$socket -> close();