Thread Client und Server für TCP und UDP
(17 answers)
Opened by ITobiI at 2015-09-10 11:56
Hi,
ich muss vorweg nehmen das ich zum ersten mal mit Perl programmiere. Ich soll je einen Client und einen Server für UDP und TCP programmieren. Ich habe das Problem wenn ich den TCP-Client starten will kommt immer die Fehlermeldung: "Invalid Argument". Könntet ihr euch auch die anderen Skripte anschauen, ob die soweit in Ordnung sind? Danke schonmal im voraus. Code (perl): (dl
)
1 2 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 #!/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 IO::Socket::INET;#Modul wird benoetigt um Netzwerkfunktionen zu nutzen #auto-flush $| = 1; #Variablen deklarieren my ($socket, $message,$peer_address,$peer_port); #bekomme ip und port von Kommandozeilenparamter my $ip=$ARGV[0]; #erste Paramenter wird in $ipaddr eingespeichert my $port = $ARGV[1]; #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) { #empfange bis zu 1024 bytes von client, packe empfangene Daten in $message Variable $socket->recv($message,1024); #definiere ip $peer_address = $socket->peerhost(); #definiere port $peer_port = $socket->peerport(); #sende $message zurueck zu client $socket->send($message); } #Schließe Socket $socket -> close(); Code (perl): (dl
)
1 2 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 #!/usr/bin/perl -w #UDP_Client.pl #Hartych, Tobias EIT 4056051 #Dreißig, Tobias EIT 40????? #Module importieren #strict macht debugging einfacher use strict; ;#Modul wird benoetigt um Netzwerkfunktionen zu nutzen use IO::Socket::INET #auto-flush $| = 1; #Variablen deklarieren my ($socket,$data,$ip,$port); $ip=$ARGV[0]; #erster Paramenter wird in $ipaddr eingespeichert $port = $ARGV[1]; #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"; print "Bitte Text zum Senden eingeben:\n"; #Hauptschleife while(1) { #Eingabe der Daten $data = <STDIN>; print "Sende Daten zum Server..."; $socket->send($data, 1024); #Warte auf Antwort vom Server $socket->recv($data, 1024); print("Empfangene Daten: $data \n"); } $socket -> close(); Code (perl): (dl
)
1 2 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 #!/usr/bin/perl -w #TCP_Server.pl #Hartych, Tobias EIT 4056051 #Dreißig, Tobias EIT 40????? use strict; #strict macht debugging einfacher use IO::Socket::INET; #nutze Modul IO::Socket::INET um einen neuen Socket zu erschaffen #auto-flush $| = 1; #Variablen deklarieren my ($socket,$connection,$data); my($peeradr,$peerport); #bekomme server-ip und server-port von Kommandozeilenparamter my $ipAddress = $ARGV[0]; #erster Paramenter wird in $ipAddress eingespeichert my $NPort = $ARGV[1]; #zweiter Paramenter wird in $NPort eingespeichert $socket = new IO::Socket::INET( LocalHost => $ipAddress, #LocalHost von $socket ist eingegebener Paramenter $ipAddress LocalPort => $NPort, #LocalPort von $socket ist eingegebener Paramenter $NPort Proto => 'tcp', #Transportprotokoll: TCP Listen => 5, #maximale Anzahl von Client's ist 5 Reuse => 1 ); die "Fehler beim erstellen des Socket's: $! \n" unless $socket; #Hauptschleife while (1) { print "Warte auf Verbindung mit Client ..\n"; $connection = $socket->accept(); #Warte auf Verbindung zum Client / Akzeptiere eingehende Client Verbindung $peeradr = $connection -> peerhost(); #definiere IP-Adresse von Client $peerport = $connection -> peerport(); print "Verbindung mit client: $peeradr:$peerport\n"; #Lies bis zu 1024 Bytes vom verbundenen Client $data = ""; $connection->recv($data, 1024); print "Empfangene Daten: $data\n"; #Schreibe Antwort zu verbundenen Client print "Antwort:\n"; $data = <STDIN>; $connection->send($data); #Informiere Client das Antwort gesendet wurde shutdown($connection, 1); } #Schließe Socket -> schliesse Verbindung zum Client $socket->close(); Code (perl): (dl
)
1 2 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 #!/usr/bin/perl -w #TCP-Client #Hartych, Tobias EIT 4056051 #Dreißig, Tobias EIT 40????? use strict; #strict macht debugging einfacher use IO::Socket::INET; #nutze Modul IO::Socket::INET um einen neuen Socket zu erschaffen #auto-flush $| = 1; #Variablen deklarieren my ($socket,$response,$size,$req); #bekomme server-ip und server-port von Kommandozeilenparamter my $peeradr = $ARGV[0]; #erster Paramenter wird in $PeerAdress eingespeichert my $peerport = $ARGV[1]; #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"; #Daten, welche zum Server gesendet werden $req = <STDIN>; $size = $socket->send($req); print "sende Daten mit einer Laenge von $size\n"; #informiere Server das Daten gesendet wurden shutdown($socket, 1); #erhalte eine Antwort von bis zu 1024 Bytes vom Server $response = ""; $socket->recv($response, 1024); print "Erhaltene Antwort\n"; #Schließe Socket $socket -> close(); modedit Editiert von GwenDragon: Code formatiert Last edited: 2015-09-10 12:10:29 +0200 (CEST) |