Netzwerk - Programmierung

Slides:



Advertisements
Ähnliche Präsentationen
Dynamische Webseiten (CGI) mit Perl
Advertisements

der Universität Oldenburg
Wiederholung Betriebssystem bietet eine Abstraktion der Hardware an:
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
C Tutorium – Fehlerbehandlung – Knut Stolze. 2 Grundsatz Also ist auch nach jedem Funktionsaufruf auf Fehler zu prüfen!! Jeder(!) Funktionsaufruf kann.
C Tutorium – Semaphoren –
Attribute Protocol.
Zusammenfassung der Vorwoche
1 Spezielle Packages des Java SDK (1.4) java.nio.
Allgemeine Technologien II
10 Streams JavaHS Merseburg WS 05/06 E/A - Ströme (Streams) in Java.
Java: Dynamische Datentypen
FH-Hof Servlets Richard Göbel. FH-Hof Konzept Servlets werden auf der Server-Seite durch ein Formular aufgerufen werten die Eingaben aus einem Formular.
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.
Funktion defined Die Funktion defined testet, ob eine Variable einen anderen Wert als undef enthält. Ist der Wert undef, so wird falsch zurückgegeben,
ARRAY oder FELD oder VEKTOR
Dynamische Webseiten mit PHP
Perl-Grundlagen Teile der Präsentation von A. Grupp,
DbjFileManager Paul Fruntzek Michael Stanek. Überblick Unterste Ebene im Schichtenmodell Schnittstelle zum BS (Low-Level) Aufgabenbereich: Persistente.
Die Skriptsprache Perl (6) Wolfgang Friebel DESY Zeuthen.
Die Skriptsprache Perl (7)
Die Skriptsprache Perl (2) Wolfgang Friebel DESY Zeuthen.
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
Datenströme DVG Datenströme.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Higher Order Perl Martin Busik Vortrag über das Buch von Marc Jason Dominus.
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,
FORTRAN 77.
Univ.-Lektor Dipl.-Ing. Dr. Markus Schranz staatlich befugter und beeideter Ingenieurkonsulent für Informatik Web Application Engineering & Content Management.
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.
SQLite und XML in PHP 5.
Mag. Andreas Starzer weloveIT – EDV Dienstleistungen
1 Tagesüberblick 2 Lösung Hausaufgabe/Fragen Datei- ein- und ausgabe Schleifen Vergleiche Wahrheit.
Programmieren in C Dateien
1 Tagesüberblick 6 Lösung Hausaufgabe/Fragen Weitere besondere Variablen Hier-Dokument Unterprogramme.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Autor: Timo Pagel Nutzung: Diese Lernkarten sind für die Nutzung mit OpenCards gedacht Siehe dazu
Lösung Hausaufgabe 4-1 #!perl -w $infile = "daten4-1.txt"; $count1 = $count2 = 0; open (IN,$infile) || die "Oeffnen: $infile $!"; while ( ){ $count2 +=
1 Tagesüberblick 5 Lösung Hausaufgabe/Fragen Assoziative Felder Funktionen zu Variablenbehandlung.
1 Lösung Hausaufgabe 5-1 Seite 1 #!perl -w # Datei Oeffnen und Variablen initialisieren $infile = "daten5-3.txt"; $im=$iw=$sm=$sw=0; open (IN,$infile)
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Java-AG Datenstreams: Dateibehandlung, Lesen aus und schreiben in eine Datei.
A SHORT INTRODUCTION TO CONCURRENT EUCLID Entwicklung von Euclid 1976 Entwicklung von Euclid 1977 Entwicklung des „TORONTO Euclid“ 1977 Entwicklung.
By Thorsten Zisler 1 SQL Datenbank Anbindung an den Supervisor.
Die Programmiersprache Ruby Seminarvortrag von Lia Schulze Dephoff 1.
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
ESP Tutorium Studienassistent: Ewald Moitzi Gruppe 1.
Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Prozesse Alexander Sczyrba Jan Krüger.
Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung I/O Multiplexing Alexander Sczyrba
Netzwerk - Programmierung
Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Concurrent Clients Alexander Sczyrba
Java I/O Input / Output stream Library
Java I/O Input / Output stream Library
Netzwerk - Programmierung
Programmieren in C Dateien
Web-Interface for Multi-FPGA Board Pamette
Netzwerk - Programmierung
Whoami. whoami Tobias FROGGS Slangs sub languages.
Netzwerk - Programmierung
Netzwerk - Programmierung
Netzwerk - Programmierung
Netzwerk - Programmierung
Netzwerk - Programmierung
GRUNDLAGEN WISSENSCHAFTLICHEN ARBEITENS MODULA-2 SONAY SUBAYAZ
Tutorstunde 10.
 Präsentation transkript:

Netzwerk - Programmierung I/O Multiplexing Alexander Sczyrba asczyrba@cebitec.uni-bielefeld.de Madis Rumming mrumming@cebitec.uni-bielefeld.de

Übersicht Unbuffered I/O Multiplexing mit select

Problem: Wann schreiben? Wann lesen? Einleitung Problem: Wann schreiben? Wann lesen? Lösung der letzten Stunde: Entkopplung durch zwei Prozesse weitere Möglichkeit: Multiplexing zwei Verfahren: select: schreibe/lese nur dann, wenn möglich nonblocking I/O: Operationen blockieren nie 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;

Input/Output unbuffered vs. buffered I/O print, <HANDLE>, . . . : Lese-/Schreibpuffer ungepufferte low-level-Funktionen: sysread, syswrite nachfolgende Verfahren verwenden unbuffered I/O

Liefert ”0“ bei end of file, undef bei Fehler schreiben: sysread/syswrite lesen: my $buflen = 1024; my $buffer; my $size = sysread($socket, $buffer, $buflen); Liefert ”0“ bei end of file, undef bei Fehler schreiben: my $buffer = "hello world"; my $size = syswrite($socket, $buffer); schreibt eventuell nur Teil des Puffers IO::Handle: gleichnamige Methoden nicht mit buffered I/O mischen 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);

SIZE = syswrite(FILEHANDLE, SCALAR, LENGTH) Aufgaben Schreibe die simplen Varianten von Client und Server aus dem Übungsarchiv der letzten Stunde so um, daß sie via unbuffered I/O über die sockets kommunizieren. Worauf ist beim Server zu achten? Verwende die alternative Variante von syswrite: SIZE = syswrite(FILEHANDLE, SCALAR, LENGTH) Setze für LENGTH einen Wert von 6 Bytes ein. sysread client.pl: my $buflen=1024; my $buffer; while (sysread($socket, $buffer, $buflen) != 0) print $buffer; syswrite server.pl: syswrite($connect, "hello $pname, nice to meet you\n"); syswrite($connect, "it’s ".localtime()."\n"); besser: sub writesocket { my ($handle, $buffer) = @_; while ($buffer) { my $len = syswrite($handle, $buffer); # print STDERR "written $len bytes\n"; $buffer = substr($buffer, $len); }

Multiplexing mit select Idee: überwache file-/sockethandles teste, ob handle ausgelesen oder beschrieben werden kann OO-Interface: IO::Select my $select = IO::Select->new(); $select->add($socket); $select->add(\*FILE); $select->remove($socket); my $num = $select->count(); my $val = $select->exists(\*FILE2); my @handles = $select->handles(); Auch diese Funktionen liefern im Listen Kontext weitere Informationen zurueck.

IO::Select verwenden Zustand der handles abfragen: my @readable = $select->can_read(); my @writeable = $select->can_write(); my @excepts = $select->has_exception(); Rückgabewert: Array von handles blockieren, bis mind. ein handle schreib-/lesbar ist optionales Argument: timeout in Sekunden

can_read() handle kann gelesen werden, wenn . . . mindestens 1 Byte Daten vorhanden sind sysread() wird nicht blockieren oder EOF vorliegt sysread() wird ”0“ zurückliefern oder Fehler vorliegt sysread() wird undef zurückliefern

can_write() handle kann beschrieben werden, wenn . . . mindestens 1 Byte geschrieben werden kann syswrite() wird bei einem Byte nicht blockieren kann blockieren, falls mehr Daten geschrieben werden oder Fehler vorliegt sysread() wird undef zurückliefern

Aufgaben Schreibe einen nicht-forkenden Client, der Eingaben von der Tastatur an einen Server weitergibt und dessen Antworten auf dem Bildschirm ausgibt. Verwende IO::Select. Teste das Programm wieder mit dem Echo- und dem Whois-Server. select client.pl: use IO::Select; # create Select object, listen to STDIN and socket my $select = IO::Select->new() || die "can’t create Select object: $!\n"; $select->add(\*STDIN); $select->add($socket); my $buflen=1024; my $buffer; my $running = 1; $| = 1; while ($running) { my @reader = $select->can_read(); foreach my $reader (@reader) { if ($reader eq \*STDIN) { my $len = sysread(STDIN, $buffer, $buflen); $running = 0 unless $len; syswrite($socket, $buffer); } elsif ($reader eq $socket) { my $len = sysread($socket, $buffer, $buflen); print $buffer; }