#!/usr/bin/perl -w #TCP-Client #Hartych, Tobias EIT 4056051 #Dreißig, Tobias EIT 4056501 use Time::HiRes qw(gettimeofday); use strict; #strict macht debugging einfacher use IO::Socket::INET; #nutze Modul IO::Socket::INET um einen neuen Socket zu erschaffen my ($socket,$peeradr,$peerport,$end,$start_sec,$start_usec,$end_sec,$end_usec,$timeDelta,$checksum_Client,$Bestaetigung_checksum); my ($daten,$Bestaetigung_daten,$zip_daten,$status,$ZipError,$laenge_Client,$FH); #bekomme server-ip und server-port von Kommandozeilenparamter $peeradr = $ARGV [0] || "127.0.0.1"; #erster Paramenter wird in $PeerAdress eingespeichert $peerport = $ARGV [1] || "9999"; #zweiter Paramenter wird in $PeerPort eingespeichert $socket = new IO::Socket::INET ( PeerHost => $peeradr, #PeerAddr von $socket ist eingegebener Paramenter $PeerAdress PeerPort => $peerport, #PeerPort von $socket ist eingegebener Paramenter $PeerPort Proto => 'tcp', #Transportprotokoll: TCP ); die "Fehler bei erstellen des Socket's: $!\n" unless $socket; print "\nVerbindung mit Server erfolgreich!\n"; print "Mit $peeradr verbunden !\n"; #Hauptschleife while(1) { #Datei in String einlesen open($FH, "<", "/root/Documents/Socket-Programmierung_2/Datei/Test") or die $!; binmode $FH; $daten = <$FH>; #packen $zip_daten = ''; use IO::Compress::Zip qw(zip $ZipError); $status = zip \$daten => \$zip_daten or die "zip schlug fehl!: $ZipError\n"; #Länge des Strings ermitteln $laenge_Client = length($zip_daten); #Sende Länge der Daten zu Server $socket->send($laenge_Client); #Prüfsumme ermitteln #$checksum_Client = unpack ("%16C*", $daten); use Digest::MD5 qw(md5_hex); $checksum_Client = md5_hex($zip_daten); $Bestaetigung_checksum = 0; while($Bestaetigung_checksum == 0) { #Bestaetigung erhalten $socket->recv($Bestaetigung_checksum,2); if($Bestaetigung_checksum == 0) { #Prüfsumme an Server senden $socket->send($checksum_Client); print("Prüfsumme: $checksum_Client\n"); } } $Bestaetigung_daten = 0; print "3\n"; #Startzeit setzen ($start_sec, $start_usec) = gettimeofday(); while($Bestaetigung_daten == 0) { print "31\n"; #Bestaetigung erhalten $socket->recv($Bestaetigung_daten,2); print "32\n"; if($Bestaetigung_daten == 0) { print "33\n"; #sende Datenpakete zu Server $socket->send($zip_daten); print "34\n"; } } #Endzeit setzen ($end_sec, $end_usec) = gettimeofday(); print "4\n"; #Sendezeit ermitteln $timeDelta = ($end_usec - $start_usec)/1000 + ($end_sec - $start_sec)*1000; print "Die Sendezeit betraegt: $timeDelta ms\n"; #lösche Inhalt $daten = (); $zip_daten = (); #Abfrage ob Programm beenden print "Wenn Programm durchgeführt werden soll dann bitte j eingeben, ansonsten beliebiges anderes Zeichen eingeben\n"; $end = ; chop($end); if($end eq 'j') { #Programm beenden close($socket); exit(); } } #Schließe Socket $socket -> close();