Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Concurrent Clients Alexander Sczyrba

Ähnliche Präsentationen


Präsentation zum Thema: "Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Concurrent Clients Alexander Sczyrba"—  Präsentation transkript:

1 Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Concurrent Clients Alexander Sczyrba asczyrba@cebitec.uni-bielefeld.de Jan Krüger jkrueger@cebitec.uni-bielefeld.de

2 Center for Biotechnology Bielefeld Bioinformatics Service Übersicht ● Server-Implementierung mit IO::Socket ● TCP Echo Client ● Concurrent Clients

3 Center for Biotechnology Bielefeld Bioinformatics Service Aufgabe Schreibe mit Hilfe von IO::Socket einen Client, der zeilenweise Eingaben an den Server schickt und Ausgaben vom Server zeilenweise ausgibt Wie verhält sich Dein Client bei einem echo-Server (vgl. Material zu Programmieren mit Sockets)? Wie verhält er sich bei einem whois-Server (bspw. ’whois.arin.net’, Port 43)? Vergleiche dazu die Ausgabe mit z.B. whois -h whois.arin.net google.com. Wo liegt das Problem?

4 Center for Biotechnology Bielefeld Bioinformatics Service Problematischer Client use IO::Socket; my $host = shift || ’localhost’; my $port = shift || ’echo’; my $socket = IO::Socket::INET->new("$host:$port") or die "Can’t connect to port $port at $host: $!\n"; while (defined(my $msg_out = )) { print $socket $msg_out; my $msg_in = ; print $msg_in; } $socket->close;

5 Center for Biotechnology Bielefeld Bioinformatics Service Deadlocks Auch folgender Versuch schlägt fehl: while ($from_server = ){ print $from_server; … } Server und Client warten gleichzeitig auf Eingaben und Erzeugen so einen Deadlock.

6 Center for Biotechnology Bielefeld Bioinformatics Service Concurrent Clients ● Lösung : Entkoppeln der lesenden und schreibenden Prozesse durch fork() ● Parent kopiert die Daten vom Client zum Server ● Child liest Daten von Server ● Problem: korrektes Beenden der Prozesse

7 Center for Biotechnology Bielefeld Bioinformatics Service Verbindungsabbau forked Client Zeit Serv er Pare nt Child Serv er Pare nt Child Serv er Pare nt Child Serv er Pare nt Child sleep( ) CHL D exit() Serv er Pare nt sleep( ) Pare nt sleep( )

8 Center for Biotechnology Bielefeld Bioinformatics Service Aufgabe Schreibe einen Client, der folgendermassen aufgebaut ist: ● Socket erzeugen ● fork() ● Parent kopiert von STDIN zum Socket (user2host()) ● Child kopiert vom Socket nach STDOUT (host2user()) ● Parent reagiert auf Signal CHLD und beendet sich ● Parent initiiert shutdown(1), wenn User-Eingabe beendet ● Child beendet sich bei EOF vom Server


Herunterladen ppt "Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Concurrent Clients Alexander Sczyrba"

Ähnliche Präsentationen


Google-Anzeigen