| Thread Fehlerfreie Übertragung einer Datei
(74 answers) Opened by
ITobiI
at 2015-09-15 17:14
 
View full thread Fehlerfreie Übertragung einer Datei
User since2015-09-10
 70
Artikel
 BenutzerIn
 
 ![[default_avatar]](/battie/theme/default/default_avatar.gif)  
Letzteres hat sich erledigt, der Onkel, also ich, hats endlich hin bekommen :) Weiß vlt jemand wie ich das ganze noch optimieren könnte (außer zippen)? 
12
 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
#!/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,$Bestaetigung,$checksum_Client,$checksum_Server,$fh);
 my ($zip_daten,$daten);
 
 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";
 
 #Hauptschleife
 while(1)
 #do
 {
 #Empfange Prüfsumme von Client
 $socket->recv($checksum_Client,1024);
 #definiere ip
 $peer_address = $socket->peerhost();
 #definiere port
 $peer_port = $socket->peerport();
 
 print "1\n";
 
 
 #Empfange und überprüfe Daten
 do
 {
 #Bestätige nicht erfolgreiches Senden
 $Bestaetigung = 0;
 $socket->send($Bestaetigung);
 
 print "11\n";
 #Empfange Daten
 $socket->recv($daten,1024);
 
 #Bilde Prüfsumme nach Empfang der Daten
 $checksum_Server = unpack ("%16C*", $daten);
 print("Prüfsumme: $checksum_Server\n");
 print "12\n";
 }
 while ($checksum_Client != $checksum_Server);
 
 print "2\n";
 
 #Bestätige erfolgreiches Senden
 $Bestaetigung = 1;
 $socket->send($Bestaetigung);
 
 print "3\n";
 
 #Entpacke
 
 
 #Gib Datei aus
 print "$daten";
 
 
 #Abfrage ob Programm beenden
 print "\nWenn Programm durchgeführt werden soll dann bitte j eingeben, ansonsten beliebiges anderes Zeichen eingeben\n";
 $end = <STDIN>;
 }
 #while($end = 'j');
 
 #Schließe Socket
 $socket -> close();
 
12
 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
#!/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 ($daten,$Bestaetigung,$zip_daten);
 
 $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)
 {
 #Datei in String einlesen
 open (DATEI, "/root/Documents/Socket-Programmierung_2/Datei/test.txt") or die $!;
 while(<DATEI>)
 {
 $daten = $daten.$_;
 }
 close (DATEI);
 
 #Prüfsumme ermitteln
 $checksum_Client = unpack ("%16C*", $daten);
 
 #Prüfsumme an Server senden
 $socket->send($checksum_Client);
 print("Prüfsumme: $checksum_Client\n");
 #packen
 
 
 $Bestaetigung = 0;
 
 print "3\n";
 
 #Startzeit setzen
 ($start_sec, $start_usec) = gettimeofday();
 
 while($Bestaetigung == 0)
 {
 print "31\n";
 #Bestaetigung erhalten
 $socket->recv($Bestaetigung,1024);
 print "32\n";
 if($Bestaetigung == 0)
 {
 print "33\n";
 #sende Datenpakete zu Server
 $socket->send($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";
 
 #Abfrage ob Programm beenden
 print "Wenn Programm durchgeführt werden soll dann bitte j eingeben, ansonsten beliebiges anderes Zeichen eingeben\n";
 $end = <STDIN>;
 }
 #while($end eq 'j');
 
 #Schließe Socket
 $socket -> close();
 |