Verteilte Systeme - Java Networking (Sockets) -

Werbung
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Verteilte Systeme
- Java Networking (Sockets) Prof. Dr. Michael Cebulla
30. Oktober 2014
Fachhochschule Schmalkalden
Wintersemester 2014/15
1 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Gliederung
2 / 36
1
Grundlagen TCP/IP
2
Sockets in Java
Klassen in Java
3
Programmieren mit Streams
Programmierung
4
Weitere Themen
Datagram Sockets
Asynchrone Server
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Outline
3 / 36
1
Grundlagen TCP/IP
2
Sockets in Java
Klassen in Java
3
Programmieren mit Streams
Programmierung
4
Weitere Themen
Datagram Sockets
Asynchrone Server
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Referenz-Architektur: OSI-Modell
Jede Schicht behandelt einen
Aspekt der Kommunikation
Von der
Hardware-/Treiber-Ebene bis
zur Anwendungsschicht
Jede Schicht bietet eine
Menge von Protokollen
4 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
TCP/IP
In der Praxis spielt das
Modell von TCP/IP
eine größere Rolle.
Hier werden nur vier
Schichten
unterschieden.
TCP: Transmission
Control Protocol
UDP: User Datagram
Protocol
5 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Verbindungsorientierte Kommunikation
Anforderung
In einer Client-Server-Architektur muss die Kommunikation verlässlich sein.
Daten dürfen nicht verloren gehen oder in der falschen Reihenfolge
ankommen.
TCP umfasst:
Verlässliche Point-to-point Verbindung zwischen zwei Programmen im
Netzwerk
Sockets werden als Endpunkte an die Verbindung gebunden
Um zu kommunizieren, schreiben und lesen die Clients und Server in
bzw. von den Sockets.
Beispielhafte Anwendungen: http, ftp, telnet (verbindungsorientiert,
verlässlich)
6 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
User Datagram Protocol (UDP)
Nicht verbindungsorientiert
UDP sendet unabhängige Datenpakete (Datagramme). Die
Ankunft ist nicht garantiert. Insbesondere wird nicht - wie bei
TCP - eine Verbindung aufgebaut.
Gut geeignet für Anwendungen, die in großem Stil
Statusdaten übertragen. Der Aufbau einer Verbindung
würde hier nur aufhalten.
Beispiel: ein Server, der die Uhrzeit sendet. Wenn ein
Paket nicht ankommt, reicht es aus, auf das nächste zu
warten.
weiteres Beispiel: ping.
7 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Ports
Ein Rechner hat normalerweise eine physikalische Verbindung zum
Internet und zu einem anderen Rechner.
Daten die für verschiedene Applikationen bestimmt sind, werden
anhand der Port-Nummern unterschieden.
Ports werden durch 16-bit Zahlen beschrieben, die von TCP und UDP
verwendet werden (Zahlenbereich: 0 - 65.535).
TCP-Server binden ihren Socket an einem
Port, so dass sie von da an alle Daten
empfangen, die an diesen Port gesendet
werden.
8 / 36
M. Cebulla
Im Falle von UDP, werden die Pakete
dynamisch anhand der Portnummern
geroutet.
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Was ist ein Socket?
Socket
Endpunkt einer bidirektionalen Kommunikationsverbindung zwischen zwei
Programming im Netz. Ein Socket ist an eine Port-Nummer gebunden, so
dass die TCP-Schicht die Anwendung identifizieren kann, die die Daten
erhalten soll.
Der Server wartet und lauscht an einem Socket, der an eine
Port-Nummer gebunden .
Der Client kennt den Rechnernamen und die Portnummer, an der der
Server auf eine Nachricht wartet
Der Client startet eine Verbindungsanfrage, wobei er sich mit seiner
Portnummer identifiziert.
Der Server akzeptiert die Verbindung.
Nach dem Akzeptieren durch den Server ist der Socket auf der
Client-Seite erfolgreich erezugt und kann benutzt werden.
Client und Server können jetzt über die Sockets kommunizieren
9 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Klassen in Java
Outline
10 / 36
1
Grundlagen TCP/IP
2
Sockets in Java
Klassen in Java
3
Programmieren mit Streams
Programmierung
4
Weitere Themen
Datagram Sockets
Asynchrone Server
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Klassen in Java
Networking in Java
Die Programmierung findet auf
dem Application Layer statt.
Zum Zugriff auf die
Transportschicht stehen die
Klassen aus dem
java.net-Package zur
Verfügung.
Die Internas der
Transportschicht werden
verborgen. Es müssen
lediglich die geeigneten
Klassen ausgewählt werden.
11 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Klassen in Java
Das Package java.net
TCP: Socket und
ServerSocket, URL und
URLConnection
UDP: DatagramSocket,
DatagramPacket,
MulticastSocket
12 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Klassen in Java
Die Klasse Socket - TCP
Das java.net-Package der Java-Plattform enthält die
Klasse Socket
Die Klasse Socket implementiert eine Seite einer
bidirektionalen Verbindung
Die Klasse Socket verbirgt die plattformspezifischen
Details der Kommunikation
Die Klasse ServerSocket implementiert die Server-seitigen
Funktionalitäten
13 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Klassen in Java
Einrichtung einer Verbindung zwischen Sockets
Auf dem Server ist ein Socket (mit Portnummer)
eingerichtet, auf dem nach einer Verbindungsanfrage
gelauscht wird.
Der Client kennt den Hostnamen und die Portnummer und
nimmt zum Server Kontakt auf. Ihm wird automatisch eine
Portnummer zugewiesen.
Wenn die Anfrage des Clients akzeptiert wird, wird eine
Verbindung eingerichtet und die eigentliche
Kommunikation kann beginnen.
14 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Klassen in Java
Die Klassen Socket und ServerSocket
15 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Programmierung
Outline
16 / 36
1
Grundlagen TCP/IP
2
Sockets in Java
Klassen in Java
3
Programmieren mit Streams
Programmierung
4
Weitere Themen
Datagram Sockets
Asynchrone Server
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Programmierung
Das Package Java.io
I/O Streams sind mächtige Abstraktionen über
verschiedene Eingabe- oder Ausgabegeräte: z.B. Dateien,
Geräte, andere Programme und Speicher-Arrays.
Ein Stream repräsentiert auf Programmierungsebene ein
Gerät.
Streams unterstützen verschiedene Datentypen wie z.B.
primitive Datentypen, Zeichenketten und Objekte. Manche
Streams übertragen einfach Daten, andere transformieren
sie in verschiedenen Weisen.
17 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Programmierung
Input- und Outputstreams
18 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Programmierung
Input Stream
19 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Programmierung
Output Stream
20 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Programmierung
Kapselung von Byte-Streams
Byte-Streams sind low level.
Die Klassen InputStreamReader und
OutputStreamReader kapseln die Bytestreams und
ermöglichen beispielsweise die Verwendung von
Characters.
PrintWriter und BufferedReader ermöglichen
komplexeres Ein- und Ausgabeverhalten.
21 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Programmierung
Socket-Verhalten allgemein
22 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Programmierung
TCP-Socket in Java
23 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Programmierung
Allgemeines Verfahren
1
Socket öffnen
2
Einen Eingabe- und Ausgabestrom öffnen für den Socket
3
Lesen und Schreiben in die Ströme
4
Ströme schließen
5
Socket schließen
Nur der dritte Schritt differiert von Client zu Client und ist vom
Server abhängig.
24 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Programmierung
Echo-Server
Server-Socket bindet an
Port mit angegebener
Nummer
Accept wartet darauf,
dass der Client eine
Anfrage startet.
25 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Programmierung
I/O mit Streams and Sockets
Nimmt den Ausgangsstream des Sockets und öffnet einen PrintWriter
auf ihm.
Nimmt den Eingangsstream des Sockets und öffnet einen
BufferedReader.
Reader und Writer-Klassen können Unicode verarbeiten.
26 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Programmierung
Client-Logik
Beispiel
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("Echo: " + in.readLine());
}
Die readLine-Methode wartet, bis der Server die Antwort zurückgesendet
hat.
27 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Datagram Sockets
Asynchrone Server
Outline
28 / 36
1
Grundlagen TCP/IP
2
Sockets in Java
Klassen in Java
3
Programmieren mit Streams
Programmierung
4
Weitere Themen
Datagram Sockets
Asynchrone Server
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Datagram Sockets
Asynchrone Server
Datagram Sockets: Kommunikation
29 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Datagram Sockets
Asynchrone Server
Datagram Sockets: Server
30 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Datagram Sockets
Asynchrone Server
Datagram Sockets: Client
31 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Datagram Sockets
Asynchrone Server
Asynchrone Server: Mehrere Clienten
Der bisherige Server ist für weitere Clients nicht erreichbar,
solange er Berechnungen durchführt.
Alternative: asynchrone Server
Bei asynchronen Servern wird die Herstellung der
Verbindung von der eigentlichen Berechnung getrennt.
32 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Datagram Sockets
Asynchrone Server
Exkurs: Threads in Java
Threads können auf zwei Arten in Java erzeugt werden:
Implementierung des Interfaces Runnable,
Ableitung von der Klasse Thread.
Erzeugte Threads werden mit run gestartet.
Die run-Methode enthält die eigentliche Funktionalität.
33 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Datagram Sockets
Asynchrone Server
Asynchroner Server
Der clientSocket, der von
accept zurückgegeben wird,
wird an den Thread
übergeben.
Dann wird der Thread
gestartet, der die
Berechnungen ausführt.
Nebenläufig zur Berechnung
kann am ServerSocket auf
eine neue Verbindung
gewartet werden.
34 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Datagram Sockets
Asynchrone Server
Asynchroner Server Thread
35 / 36
M. Cebulla
Verteilte Systeme
Grundlagen TCP/IP
Sockets in Java
Programmieren mit Streams
Weitere Themen
Datagram Sockets
Asynchrone Server
Zusammenfassung und Ausblick
Zusammenfassung:
Sockets sind ein grundlegender
Kommunikationsmechanismus, der von Java zur
Verfügung gestellt wird.
Protokolle: TCP und UDP.
Synchrone und Asynchrone Server (mit Multithreading).
Ausblick:
Multi-Threading in Client Server Architekturen
Weitere Konzepte in java.net.*
Multithreading
36 / 36
M. Cebulla
Verteilte Systeme
Herunterladen