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