Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Netzwerk - Programmierung

Ähnliche Präsentationen


Präsentation zum Thema: "Netzwerk - Programmierung"—  Präsentation transkript:

1 Netzwerk - Programmierung
IO::Socket API Alexander Sczyrba Jan Krüger

2 Übersicht IO::Socket Methoden Benutzung von IO::Socket TCP Client TCP Server

3 IO::Handle Klassenhierachie
IO::Socket API IO::Handle Klassenhierachie IO:: Handle stellt OO-Syntax für alle Perl I/O Methoden IO::Socket definiert zusätzlich Methoden für Berkeley Sockets Dabei erzeugt man immer ein IO::Socket::INET oder IO::Socket::UNIX Objekt IO::Handle IO::File IO::Pipe IO::Socket IO::Socket::INET IO::Socket::UNIX

4 IO::Socket::INET Objekte
$socket = Erzeugt ein IO::SOCKET::INET Objekt Gibt das neu erzeugte Objekt zurück Im Falle eines Fehlers : undef Akzeptiert zwei Arten von Argumenten: „shortcut“ : IO::Socket::INET->new($host:$port“) Argumentliste

5 IO::Socket::INET->new()
Argument Beschreibung Wert PeerAddr Remote Host <hostname | address> [:port] PeerPort Remote Port/Service <service name | port number> LocalAddr Lokaler Host LocalPort Lokaler Port/Service Proto Protokoll <protocol name | number> Type SocketTyp SOCK_STREAM | SOCK_DGRAM Timeout Timeout Wert <Integer> Listen Queuegröße für Listen ... Im Listen-Kontext liefern die gethostby*-Funktionen weitere Informationen: ($name, $aliases, $type, $len, $iaddr) = gethostbyname($reqname); ($name, $aliases, $type, $len, $iaddr) = gethostbyaddr($reqiaddr, AF_INET);

6 Beispiel oder: addrconv.pl:
$echo = IO::Socket::INET->new(PeerAddr => ’asien:echo’) or die "Can’t connect: $!\n"; oder: $echo = IO::Socket::INET->new( PeerAddr => ’asien’, PeerPort => ’echo’, Type => SOCK_STREAM, Proto => ’tcp’) or die "Can’t connect: $!\n"; addrconv.pl: use Socket; = qw(goldfinger goldfinger.TechFak.Uni-Bielefeld.DE foreach $in_name { # my $iaddr = gethostbyname($in_name); my $iaddr = inet_aton($in_name); my $dotqd = inet_ntoa($iaddr); my $out_name = gethostbyaddr($iaddr, AF_INET); print "$in_name -> $iaddr -> $out_name ($dotqd)\n"; }

7 IO::Socket Objektmethoden(1)
$return val = $socket->connect($dest addr) $return val = $socket->bind($local addr) werden normalerweise automatisch durch new() aufgerufen $my addr = $socket->sockhost() $her addr = $socket->peerhost() geben volle dotted-quad Form der verbundenen Hosts zurück Auch diese Funktionen liefern im Listen Kontext weitere Informationen zurueck.

8 IO::Socket Objektmthoden (2)
$connected socket = $socket->accept() Akzeptiert die nächste ankommende Verbindung des listening $socket-Objekts und gibt den verbunden Socket dieser Session zurück. $connected_socket kann dann zur Kommunikation mit dem Remote-Host verwendet werden. $socket->close() Schließt den Socket. u.v.m (siehe man IO::Socket)

9 Aufgaben Schreibe mit Hilfe von IO::Socket ein Client Programm das eine Verbindung aufbaut, alle Daten liest und die Verbindung wieder beendet. Der Zielrechner und der Zielport sollen als Argumente übergeben werden können. Probiere den Client mit dem ServiceServer (Material zur vorherigen Übung) aus. Tipp: das IO::Socket::INET Objekt kann in der lesenden Schleife als Filehandle benutzt werden: while ($in = <$socket>) { … } #!/usr/bin/env perl use IO::Socket; my $host = shift || ’localhost’; my $port = shift || ’daytime’; my $socket = IO::Socket::INET->new("$host:$port") or die "Can’t connect to port $port at $host: $!\n"; print ("connected to ". $socket->peerhost().":". $socket->peerport()."\n"); my $line; while (defined($line = <$socket>)) { print $line; } $socket->close || die "can’t close socket: $!";

10 Aufgaben Schreibe mit Hilfe des Moduls IO::Socket einen Server, der auf Verbindungen wartet, zwei Zeilen Text sendet und dann die Verbindung schließt. Die erste Zeile soll den Client begrüßen, die zweite soll die aktuelle Uhrzeit ausgeben: hello goldfinger.TechFak.Uni-Bielefeld.DE, nice to meet you it’s Mon Jun 2 15:14: Du kannst den Server entweder mit dem Client aus der letzten Aufgabe oder mit dem Programm telnet testen. #!/usr/bin/env perl use IO::Socket; my $quit=0; $SIGINT = sub $quit++ ; my $port = shift; my $socket = IO::Socket::INET->new( Listen => 10, LocalPort => $port, Timeout => 60, Reuse => 1) or die "Can’t create listening socket: $!\n"; print STDERR "waiting for incoming connections on port $port...\n"; while(!$quit) { next unless my $session = $socket->accept; my $peerhost = $socket->peerhost(); my $peerport = $socket->peerport(); print STDERR "connection from $peerhost:$peerport\n"; print $session "hello $peerhost, nice to meet you\n"; print $session "it’s ".localtime()."\n"; $session->close(); } $socket->close() || die "can’t close socket: $!";


Herunterladen ppt "Netzwerk - Programmierung"

Ähnliche Präsentationen


Google-Anzeigen