Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.
Transcript of Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.
![Page 1: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/1.jpg)
Socket-Programmierung
Referent: Robert SchädlichBetreuer: Olaf
Hilden, Kurs 5.3
![Page 2: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/2.jpg)
1) Verbinden, senden und empfangen2) Eine Netzwerkverbindung über einen
Socket herstellen3) Der TippDesTagesClient4) Das Lesen von Daten aus einem Socket5) Der TippDesTagesServer6) Das Schreiben von Daten in einen Socket7) Exceptions8) Zusammenfassung und Ausblick
Inhaltsverzeichnis
![Page 3: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/3.jpg)
Herstellen einer Verbindung zwischen Client und Server
Senden von Nachrichten
Empfangen von Nachrichten
1) Verbninden, Senden und Empfangen
![Page 4: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/4.jpg)
Socket (Klasse: java.net.Socket):
repräsentiert die Verbindung zwischen zwei Maschinen, bei der beide Softwareteile voneinander wissen
beide Softwareteile können miteinander kommunizieren, d.h. sie können sich gegenseitig Bits zusenden
2) Eine Netzwerkverbindung über einen Socket herstellen
![Page 5: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/5.jpg)
![Page 6: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/6.jpg)
Portnummern: „Unverwechselbares
Identifikationsmerkmal“ ermöglicht Zuordnung von Clientanfragen
zu Anwendungen 0-1023 (von insgesamt 65536) sind bereits
für sog. „Well-known services“ reserviert (z.B. HTTP-Server auf Port 80)
![Page 7: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/7.jpg)
Das Programm muss im Wesentlichen zwei Dinge tun:
1) Verbindung zum Server herstellen2) Nachricht lesen
3) Der TippDesTagesClient
![Page 8: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/8.jpg)
import java.net.* ;
public class TippDesTagesClient {
public void los () {
Socket s = new Socket ("127.0.0.1", 4242) ;
......
}
public static void main (String[] args) {TippDesTagesClient client = new TippDesTagesClient () ;client.los () ;
}}
![Page 9: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/9.jpg)
1) Eine Socket-Verbindung herstellen
2) Einen InputStreamReader erzeugen, der mit dem Verbindungsstrom verkettet ist
3) Einen BufferedReader machen und lesen!
4) Das Lesen von Daten aus einem Socket
Socket sock = new Socket ("127.0.0.1", 4242) ;
InputStreamReader streamreader = new InputStreamReader (sock.getInputStream () );
BufferdReader reader = new BufferdReader (streamreader) ;String message = reader.readLine () ;
![Page 10: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/10.jpg)
![Page 11: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/11.jpg)
import java.net.* ; import java.io.* ;
public class TippDesTagesClient {
public void los () {
Socket sock = new Socket ("127.0.0.1", 4242) ;
InputStreamReader streamreader = new InputStreamReader (sock.getInputStream() ) ;
BufferedReader reader = new BufferedReader (streamreader) ;String tipp = reader.readLine () ;System.out.println (”Tipp des Tages: “ + tipp) ;reader.close () ;
}
public static void main (String[] args) {TippDesTagesClient client = new TippDesTagesClient () ;client.los () ;
}}
![Page 12: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/12.jpg)
1) Die Server-Anwendung erzeugt einen ServerSocket auf einem bestimmten Port.
2) Der Client stellt eine Socket-Verbindung zur Anwendung her.
3) Der Server erzeugt einen Socket für die Kommunikation mit diesemClient
5) Der TippDesTagesServer
Socket sock = new Socket ("127.0.0.1", 4242) ;
ServerSocket serversock = new ServerSocket (4242) ;
Socket sock = serversock.accept () ;
![Page 13: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/13.jpg)
import java.net.* ; import java.io.* ;
public class TippDesTagesServer { String[] tippListe = {"Essen Sie weniger Chips und Gummibärchen.", "Holen Sie sich die engen Jeans. Nein, Sie sehen darin NICHT dick aus. ", "Mit einem Wort: Unmöglich!", "Seien Sie ehrlich, nur heute. Sagen Sie ihrem Chef, was sie *wirklich* denken.", "Sie sollten wirklich mal wieder zum Friseur gehen…", "Gönnen Sie sich ein kaltes Bierchen – Sie haben es sich verdient! ", "Dieser Grünton steht Ihnen eigentlich nicht besonders…"} ;
public void los () {ServerSocket serversock = new ServerSocket (4242) ;
while (true) {
Socket sock = serversock.accept () ;}
}private String getTipp () {
int zufallszahl = (int) (Math.random() * tippListe.length) ;return tippListe [zufallszahl] ;
}public static void main (String[] args) {
TippDesTagesServer server = new TippDesTagesServer () ;server.los () ;
}}
![Page 14: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/14.jpg)
1) Eine Socket-Verbindung herstellen
2) Einen PrintWriter erzeugen, der mit dem Verbindungsstrom verkettet ist
3) Etwas schreiben
6) Das Schreiben von Daten in einen Socket
Socket sock = new Socket ("127.0.0.1", 4242) ;
PrintWriter writer = new PrintWriter (sock.getOutputStream () ) ;
writer.println (“zu sendende Nachricht”) ;
![Page 15: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/15.jpg)
![Page 16: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/16.jpg)
import java.net.* ; import java.io.* ;
public class TippDesTagesServer { String[] tippListe = {"Essen Sie weniger Chips und Gummibärchen.", "Holen Sie sich die engen Jeans. Nein, Sie sehen darin NICHT dick aus. ", "Mit einem Wort: Unmöglich!", "Seien Sie ehrlich, nur heute. Sagen Sie ihrem Chef, was sie *wirklich* denken.", "Sie sollten wirklich mal wieder zum Friseur gehen…", "Gönnen Sie sich ein kaltes Bierchen – Sie haben es sich verdient! ", "Dieser Grünton steht Ihnen eigentlich nicht besonders…"} ;
public void los () {ServerSocket serversock = new ServerSocket (4242) ;while (true) {
Socket sock = serversock.accept () ;PrintWriter writer = new PrintWriter (sock.getOutputStream () ) ;String tipp = getTipp () ;writer.println (tipp) ;writer.close () ;
System.out.println (tipp) ;}
}private String getTipp () {
int zufallszahl = (int) (Math.random() * tippListe.length) ;return tippListe [zufallszahl] ;
}public static void main (String[] args) {
TippDesTagesServer server = new TippDesTagesServer () ;server.los () ;
}}
![Page 17: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/17.jpg)
Mögliche Ursachen: Port des Servers bereits belegt bzw. Port des
Clients nicht belegt Netzwerkverbindung unterbrochen (Kabel,
Telekom, …) Verwendung von try/catch-Blöcken Im try-Block steht riskante Methode und im
catch-Block die Problembehandlung Wenn nichts mehr zu retten ist, sollte im catch-
Block die printStackTrace()-Methode stehen, um zumindest den Fehler zurückverfolgen zu können
7) Exceptions
![Page 18: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/18.jpg)
Überarbeiteter Clientcode:import java.net.* ; import java.io.* ;
public class TippDesTagesClient {
public void los () { try {
Socket sock = new Socket ("127.0.0.1", 4242) ;….reader.close
} catch (IOException ex) { ex.printStackTrace () ; }}
public static void main (String[] args) {TippDesTagesClient client = new TippDesTagesClient () ;client.los () ;
}}
![Page 19: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/19.jpg)
Überarbeiteter Servercode:import java.net.* ; import java.io.* ; public class TippDesTagesServer { String[] tippListe = { … } ;
public void los () { try {
ServerSocket serversock = new ServerSocket (4242) ;while (true) {
Socket sock = serverSock.accept () ;PrintWriter writer = new PrintWriter (sock.getOutputStream
() ) ;String tipp = getTipp () ;writer.println (tipp) ;writer.close () ;System.out.println (tipp) ;
} } catch (IOException ex) { ex.printStackTrace () ; }}…
public static void main (String[] args) {TippDesTagesServer server = new TippDesTagesServer () ;server.los () ;
}}
![Page 20: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/20.jpg)
Client- und Server-Anwendungen kommunizieren über eine Socket-Verbindung.
Ein Socket repräsentiert eine Verbindung zwischen zwei Anwendungen, die auf verschiedenen realen Maschinen laufen können (aber nicht müssen)
Ein Client muss IP-Adresse und die TCP-Portnummer der Server-Anwendung wissen.
8) Zusammenfassung & Ausblick
![Page 21: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/21.jpg)
Mit Hilfe von TCP-Portnummern können sich verschiedene Clients mit derselben Maschine verbinden und dabei mit unterschiedlichen auf diesem Rechner laufenden Anwendungen kommunizieren.
Ein Client verbindet sich mit einem Server, indem er einen Socket erzeugt.
Für die Kommunikation über eine Socket-Verbindung verwendet man ganz normale Eingabe/Ausgabe-Ströme.
![Page 22: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/22.jpg)
Kathy Sierra und Bert Bates (deutsche Übersetzung: Elke Buchholz und Lars Schulten), (2006). “Java von Kopf bis Fuß“. Köln:O‘Reilly Verlag
Stefan Middendorf, Reiner Singer, Jörn Heid, (2009). http://www.dpunkt.de/java/Programmieren_mit_Java/Netzwerkprogrammierung/12.html
Quellen
![Page 23: Referent: Robert Schädlich Betreuer: Olaf Hilden, Kurs 5.3.](https://reader035.fdokument.com/reader035/viewer/2022062318/55204d7249795902118c4e4f/html5/thumbnails/23.jpg)