Netzwerk - Programmierung

Slides:



Advertisements
Ähnliche Präsentationen
Wiederholung Betriebssystem bietet eine Abstraktion der Hardware an:
Advertisements

C Tutorium – Fehlerbehandlung – Knut Stolze. 2 Grundsatz Also ist auch nach jedem Funktionsaufruf auf Fehler zu prüfen!! Jeder(!) Funktionsaufruf kann.
Classroom Commands German.
1 Spezielle Packages des Java SDK (1.4) java.nio.
10 Streams JavaHS Merseburg WS 05/06 E/A - Ströme (Streams) in Java.
Dateihandles Um in Perl eine bestimmte Datei zum Lesen, Schreiben oder Anhängen zu öffnen, benötigt man so genannte Dateihandles. Ein Dateihandle ist der.
1 Named Pipes alias FIFO Haben einen Eintrag im Dateisystem und sind somit durch Zugriffsrechte identifizierbar Ermöglichen die Kommunikation zwischen.
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University Test Summary: m ein Fehler pro Tag m Test First m Funktionstests.
Modulare Programmierung
Datenströme DVG Datenströme.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Einführung MySQL mit PHP
Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University Test Summary: m ein Fehler pro Tag m Test First m Funktionstests.
Steuerung externer Komponenten über ein USB-Interface.
Learning By Doing TCP/IP Netzwerke mit TCP/IP Das Internet verwendet weitgehend das rund 30-jährige TCP/IP-Protokoll (TCP: Transmission Control Protocol,
Socket-Programmierung
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
PHP und MYSQL am Organisatorisches Der komplette Kurs im Schnelldurchgang Bewertung von wichtig und unwichtig Historisch Kulturwissenschaftliche.
+ Deutsch 3 B Stunde. + Montag, der 29. Oktober 2012 Deutsch 3 (B Stunde) Heute ist ein D – Tag! Unit: Objectives:
You need to use your mouse to see this presentation © Heidi Behrens.
Classroom Commands German.
Was mich ursprünglich von Perl überzeugt hat. Gegeben ist eine Textdatei, deren Größe unbekannt ist. Sie ist jedoch so klein, daß sie komplett in den Speicher.
Einführung in PHP.
Einführung in PHP 5.
Mag. Andreas Starzer weloveIT – EDV Dienstleistungen
1 Tagesüberblick 2 Lösung Hausaufgabe/Fragen Datei- ein- und ausgabe Schleifen Vergleiche Wahrheit.
1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
VBA-Schulung /28Objektübersicht2 Übersicht der orgAnice Database Server- und orgAnice Data- Objekte.
Café in Berlin Like Arme Anna, you need to write all of the “Aufgabe” on the same sheet or sheets of paper. Date it, write the chapter and complete the.
Connect Four Print out a copy of the game board on the next slide and try to get four in a row: across, down or diagonally by answering the German questions.
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
I will be able to use the accusative pronouns in a sentence (Buch Seite 200)
Deutsch 1 Lesson 6 den 30. April  What do all German nouns have in common? Revision.
Schreiben Write a postcard to your new pen pal in Germany. Make sure you are using all the learning targets we addressed in Chapter 1. Ask you friend questions:
Java-AG Datenstreams: Dateibehandlung, Lesen aus und schreiben in eine Datei.
Unterwegs.
Berliner Elektronenspeicherring-Gesellschaft für Synchrotronstrahlung m.b.H., Albert-Einstein-Straße 15, Berlin frontend control at BESSY R. Fleischhauer.
Rotkäppchen: Wie sieht sie aus? Richtig oder falsch?
Interrogative and Relative Pronouns. Interrogative pronouns Used to ask questions –Wer nominativ –Wen akkusativ –Wem dativ –Wessen whose –Was (n or a)
Café in Berlin Like Arme Anna, you need to write all of the “Aufgabe” on the same sheet or sheets of paper. Date it, write the chapter and complete the.
Ein-/ Ausgabe in Java ein Überblick. © eigentlich ganz einfach ? Ein-/Ausgabe durch package java.io Ausgabe (auf Konsole) mit System.out.println()
Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Threads Alexander Sczyrba Jan Krüger.
Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Vorbesprechung, Administrativa, Einführung Alexander Sczyrba
Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Kommunikation von Prozessen Signale und Pipes Alexander Sczyrba
Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Programmieren mit sockets Alexander Sczyrba
Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Netzwerke Alexander Sczyrba Jan Krüger.
Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Prozesse Alexander Sczyrba Jan Krüger.
LLP DE-COMENIUS-CMP Dieses Projekt wurde mit Unterstützung der Europäischen Kommission finanziert. Die Verantwortung für den Inhalt dieser.
Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung I/O Multiplexing Alexander Sczyrba
Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Concurrent Clients Alexander Sczyrba
Volume 1, Chapter 3.
Netzwerk - Programmierung
Volume 1, Chapter 9.
Volume 1, Chapter 12.
Netzwerk - Programmierung
Netzwerk - Programmierung
Netzwerk - Programmierung
Netzwerk - Programmierung
Netzwerk - Programmierung
Die magischen Zahlen.
Netzwerk - Programmierung
Die magischen Zahlen.
Quality assured by the ALL Connect project (2015)
Tutorstunde 10.
Test Summary: ein Fehler pro Tag Test First
Willkommen! Deutsch 9. Klasse.
Ich - Projekt Due Monday, September 19..
Schleifen Datenfelder (Arrays) Verzweigungen
 Präsentation transkript:

Netzwerk - Programmierung Nonblocking I/O Alexander Sczyrba asczyrba@cebitec.uni-bielefeld.de Jan Krüger jkrueger@cebitec.uni-bielefeld.de

Übersicht Grenzen von select Nonblocking I/O

Multiplexing per select: Wer schreibt? Lesen oder Schreiben ? Multiplexing per select: Wer schreibt? aber: sysread/syswrite können blockieren deadlocks weiterhin möglich echoclient.pl: #!/usr/bin/env perl 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 = <STDIN>)) { print $socket $msg_out; my $msg_in = <$socket>; print $msg_in; } $socket->close;

Lad Dir das Material zu dieser Übung herunter. Aufgaben Lad Dir das Material zu dieser Übung herunter. Starte den ServiceServer (Material Übung Programmieren mit Sockets). Sieh Dir das Programm selectecho1.pl an. Verbinde es mit dem echo-Server. Was passiert, wenn Du das Programm mit dem slow-echo-Server reden läßt? Der slow-echo-Server arbeitet wie der echo-Server, gibt die gelesenen Daten aber mit vier Sekunden Verzögerung und in Blöcken von 30 Bytes zurück. selectecho1.pl: # create Select object, listen to socket my $select = IO::Select->new() || die "can’t create Select object: $!\n"; $select->add($socket); my $buffer; $| = 1; while (1) { # try to write my @writer = $select->can_write(); if (@writer) { my $buffer = scalar(localtime()); my $len = syswrite($socket, $buffer); print "wrote ",substr($buffer, 0, $len),"\n"; } # try to read my @reader = $select->can_read(); if (@reader) { my $len = sysread($socket, $buffer, 80); print "read ",$buffer,"\n"; # to something else print "do something else\n";

Aufgaben Das Programm selectecho2.pl verwendet eine Variante der select- Methode: my ($readers, $writers, undef) = IO::Select->select($select, $select, undef); Wie verhält sich das Programm im Zusammenspiel mit dem slow-echo-Server? Die Methoden can_read, can_write und select akzeptieren als weiteren Parameter einen timeout. Probiere in selectecho2.pl timeouts von 1 und 0 Sekunden aus. Was passiert? selectecho2.pl: while (1) { # look who’s ready to read or write my ($readers, $writers, undef) = IO::Select->select($select, $select, undef); # write, if the socket is writeable foreach (@$writers) { my $buffer = scalar(localtime()); my $len = syswrite($socket, $buffer); print "wrote ",substr($buffer, 0, $len),"\n"; } # read, if the socket is readable foreach (@$readers) { my $len = sysread($socket, $buffer, 80); print "read ",$buffer,"\n"; # do something else print "do something else\n";

Nonblocking I/O markiere handle/socket als nonblocking Schreib-/Lesezugriffe blockieren nicht entweder Daten oder Fehler falls Fehler: sysread/syswrite liefert undef $! wird auf EWOULDBLOCK gesetzt use Errno qw(:POSIX);

Nonblocking handles handle beim Öffnen als nonblocking markieren sysopen(FILE, $name, O_RDWR|O_NONBLOCK); nachträglich setzen: my $flags = fcntl(FILE, F_GETFL, 0); fcntl(FILE, F_SETFL, $flags | O_NONBLOCK); Makros in Modul Fcntl OO-Interface: $socket->blocking(0);

Beispiel use Errno qw(:POSIX); $socket->blocking(0); while ($running) { my $len = sysread($socket, $buffer, $buflen); if (defined($len)) { if ($len) { print "read: $buffer\n"; } else { $running = 0; } } else { if ($! == EWOULDBLOCK) { print "BLOCK PREVENTED\n"; } else { die "unexpected error: $!\n"; } } }

Aufgabe Der Lotto-Server (teil des ServiceServer2) generiert im Abstand von| einer Sekunde jeweils eine Zufallszahl. Schreibe ein Programm, das solange von diesem Server liest, bis sechs verschiedene Zahlen gesammelt wurden. Verwende das Modul Rotor.pm, um anzuzeigen, daß Dein Programm auf die nächste Zufallszahl wartet. Sieh Dir das Programm rotor.pl zur Dokumentation an. lottoclient.pl: $socket->blocking(0); my %lotto = (); my $buffer; my $rotor = Rotor->new(); while (keys(%lotto) < 6) { # try to read number from socket my $len = sysread($socket, $buffer, 5); if (defined($len)) { if ($len == 0) { die "connection closed by peer\n"; } if (my ($num) = ($buffer =˜ /ˆ(\d+)$/)) { $lotto{$num} = 1; print "fetched $num\n"; } } else { if ($! == EWOULDBLOCK) { $rotor->print; }else { die "unexpected error: $!\n"; $socket->close(); print "your lucky numbers are ", join(’ ’, sort({$a<=>$b} keys(%lotto))),".\n";

Aufgabe Schreibe den echo-Client vom Anfang der Stunde mit Hilfe von nonblocking I/O so, um daß nicht mehr select verwendet wird. nonblockecho.pl: while (1) { # try to write my $buffer = scalar(localtime()); my $len = syswrite($socket, $buffer); if (defined($len)) { print "wrote ",substr($buffer, 0, $len),"\n"; } # try to read my $len = sysread($socket, $buffer, 80); print "read ",$buffer,"\n"; # do something else $rotor->print(); Eigentlich müßte noch der Fall behandelt werden, daß beim syswrite nur ein Teil des buffers geschrieben wird. Der Rest des zu sendenden Textes müßte dann in weiteren Versuchen geschrieben werden.