Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Java für Fortgeschrittene Kurseinheit 06 Netzwerkprogrammierung Thomas Klutsch Florian Köttner Dienstag, 26. Juli 2011WS 2011/2012.

Ähnliche Präsentationen


Präsentation zum Thema: "Java für Fortgeschrittene Kurseinheit 06 Netzwerkprogrammierung Thomas Klutsch Florian Köttner Dienstag, 26. Juli 2011WS 2011/2012."—  Präsentation transkript:

1 Java für Fortgeschrittene Kurseinheit 06 Netzwerkprogrammierung Thomas Klutsch Florian Köttner Dienstag, 26. Juli 2011WS 2011/2012

2 Aufbau der Einheit: 1. Einleitung: Terminolgie Zugriff auf eine URL 2. Socket für Server/Client-Applikation Server Client 3. RMI für Server/Client-Applikation Server Client Netzwerkprogrammierung Folie 2 von 19

3 1. Einleitung Terminologie: Host: am Netz angeschlossener Rechner. IP-Adresse: Identifikation eines Hosts, IPv4 als 32-Bit-Zahl, IPv6 128-Bit-Zahl. DNS (Domain Name Service): Zuordnung eines Namens zur IP-Adresse. Kommunikation zweier Host über Datenpakete welche über den IP (Internet Protocol) Standard vermittelt werden (Datenpaket = body + header). Weiterleitung von Paketen über Router (Routing Protokolle). IP als verbindungsloses Protokoll, Daten können verloren/verdoppelt werden TCP/IP, also Transmission Control Protocol als Erweiterung zur korrekten Reihenfolgeeinhaltung und Verlustmanagement bei IP-Paketen. Weitere Protokolle: User Datagram Protocol (UDP) Java: Programmierung auf Sockets, einer API auf TCP-Ebene Folie 3 von 19 Netzwerkprogrammierung

4 Zugriff auf eine URL (Uniform Resource Locator): Klasse URL aus java.net Folie 4 von 19 Netzwerkprogrammierung 1. Einleitung

5 Aufgabe 1: Geben sie den Inhalt der Textdatei unter auf der Konsole aus!http://dl.dropbox.com/u/ /Text.txt 1. Erstellen Sie eine neue Klasse mit dem Namen: ReadFromUrl 2. Erstellen Sie ein URL-Objekt mit obiger Pfadangabe! 3. Benutzen Sie geeignete Methoden aus dem Kapitel Input/Output um die Textdatei auszulesen und auf der Konsole anzeigen zu lassen. Netzwerkprogrammierung 1. Einleitung Folie 5 von 19

6 Klasse: URL-Connection Abstrakte Klasse zum Empfang der Inhalte der URL-Objekte enthält verschiedene Methoden um z.B. den Header einer HTTP-Seite auszulesen Klasse: Authenticator Geeignet bei Authentifizierungsbitte/Passwortabfrage Netzwerkprogrammierung 1. Einleitung Folie 6 von 19

7 Klasse InetAdress Gibt uns Methoden zum Auslesen der IP-Adresse oder des Hostnamens einer URL wir können also die Rolle des DNS übernehmen ebenso kann die lokale IP-Adresse des eigenen Rechners mit getLocalHost() ausgelesen werden Netzwerkprogrammierung 1. Einleitung Folie 7 von 19

8 2. Sockets 2. Sockets für eine Server/Client-Applikation Bisher: high-level Programmierung ohne Einblick in TCP/IP Protokolle Nun: eigene Server/Client-Applikationen mit sicherer/verlustfreier Verbindung Java-Sockets Ein Socket ist eine Datenstruktur zur Administration von (Netzwerk-) Verbindungen. Ein Socket ist ein Endpunkt einer bidirektionalen Kommunikationsbeziehung zwischen zwei im Netz laufenden Programmen (Prozessen). Endpunkt 1: Server Javaklasse: ServerSocket (TCP) Dieser bietet einen Dienst an und wartet auf eingehende Verbindungen Endpunkt 2: Client Javaklasse: Socket (TCP) Dieser verbindet sich zu einem Server und benutzt den angebotenen Dienst des Servers Netzwerkprogrammierung Folie 8 von 19

9 Die wichtigsten Klassen aus java.net zur Realisierung von Socketverbindungen (TCP):.Socket.ServerSocket.DataInputStream.PrintStream.DataOutputStream.URL.URLConnection 2. Sockets Netzwerkprogrammierung Folie 9 von 19

10 Erstellung eines Sockets als Serverendpunkt einer Verbindung: 1. Schritt: Ein ServerSocket Objekt erzeugen: ServerSocket listenSocket = new ServerSocket(portNumber); 2. Schritt: Ein Socket Objekt aus dem ServerSocket erzeugen: while (someCondition) { Socket server = listenSocket.accept(); doSomethingWith(server); } 3. Schritt: Ein input stream erzeugen: BufferedReader in = new BufferedReader(new InputStreamReader( server.getInputStream())); 4. Schritt: Ein output stream erzeugen: PrintStream out = new PrintStream(server.getOutputStream()); 5. Schritt: Nutzdaten senden und empfangen. in.readLine(); out.println(); 6. Schritt: Ströme schließen: out.close(); in.close(); 7. Schritt: Socket schließen: server.close(); 2. Sockets Netzwerkprogrammierung Folie 10 von 19

11 Erstellung eines Sockets als Clientendpunkt einer Verbindung 1. Schritt: Ein Socket Objekt erzeugen (Öffnen eines Sockets): Socket client = new Socket(hostname,portNumber); 2. Schritt: Ein output stream erzeugen, um Daten zu senden: PrintStream out = new PrintStream(client.getOutputStream()); bzw. DataOutputStream out2 = new DataOutputStream(client.getOutputStream()); 3. Schritt: Ein input stream erzeugen, um die Antwort des Servers zu empfangen: DataInputStream in = new DataInputStream(client.getInputStream()); bzw. BufferedReader in = new BufferedReader( new InputStreamReader(Client.getInputStream())); 4. Schritt: Nutzdaten senden und empfangen. in.readLine(); out.println(); aber out2.writeBytes(); 5. Schritt: Ströme schließen: out.close(); in.close(); 6. Schritt: Socket schliessen: client.close(); Netzwerkprogrammierung 2. Sockets Folie 11 von 19

12 Aufgabe 2: Schreiben sie eine Server/Client-Applikation auf Basis von Sockets und dem TCP- Verbindungsprotokoll, welche folgendes ermöglicht: 1. Eine Klasse TCP-Server wartet auf die Verbindung eines Clients. 2. Eine Klasse TCP-Client verbindet sich mit dem Server und liest eine Benutzereingabe auf der Konsole ein. 3. Dies Konsoleneingabe soll über eine Socketverbindung an den Server geschickt werden, welcher die Eingabe in upper-case-Darstellung dem User zurückgibt. 4. Nach erfolgreicher Rückgabe wird der Client geschlossen, der Server wartet jedoch weiterhin auf Verbindungen! Netzwerkprogrammierung 2. Sockets Folie 12 von 19

13 3. RMI für eine Server/Client-Applikation Ziel: entfernte Objekte und Methoden aufrufbar! Sicht auf entfernte Dienste wie auf Methoden innerhalb einer Laufzeitumgebung ein Methodenaufruf auf einen Server soll so aussehen, als ob er eine lokale Methode wäre. RMI (Remote Method Invocation) macht es möglich, auf hohem Abstraktionsniveau zu arbeiten und entfernte Methodenaufrufe zu realisieren. Automatisch generierte Stellvertreter nehmen die Daten entgegen und übertragen sie zum Server. Nach der Antwort präsentiert der Stellvertreter das Ergebnis. 3. RMI Netzwerkprogrammierung Folie 13 von 19

14 3 Teile von RMI: 1.Server stellt das entfernte Objekt mit einer Methodenimplementierung bereit, er leitet also eingehende Anfragen vom Netzwerk an diese Methode weiter. 2.Ein Namensdienst (Registry) verbindet Objekte mit ihren Methoden unter einem eindeutigen Namen. Der Server meldet Objekte mit ihren Methoden beim Namensdienst an. 3.Der Client möchte auf eine Methode des entfernten Objektes zugreifen und frägt demnach erst beim Namensdienst an, um Zugriff zu bekommen. Netzwerkprogrammierung 3. RMI Folie 14 von 19

15 Der RMI Server 1.Eine entfernte Schnittstelle deklariert Methoden. 2.Eine Klasse implementiert die Schnittstelle und füllt die Methode mit Leben => Remote-Objekt-Implementierung. Netzwerkprogrammierung 3. RMI Folie 15 von 19

16 3. RMI Netzwerkprogrammierung 3.Der Server meldet das entfernte Objekt unter einem öffentlichen Namen bei der Registry an und muss es vor der Bereitstellung für die Clients exportieren, um für eine eingehende Verbindung bereit zu sein. Folie 16 von 19

17 Netzwerkprogrammierung Der RMI Client 1.Um entfernte Methoden zu nutzen, muss ein entferntes Objekt gesucht und angesprochen werden. Dazu fragen wir den Namensdienst. Der Name für das Objekt setzt sich aus der URL und dem Namen des Dienstes zusammen. 3. RMI Folie 17 von 19

18 Aufgabe 3: Schreiben sie eine Server/Client-Chatapplikation auf Basis von RMI, welche folgendes ermöglicht: 1. Ein Server bietet einen Dienst an, welcher beliebig viele Nutzer zwischenspeichert und jedem Chatteilnehmer eine andere Schriftfarbe gibt. 2. Der Server verwaltet alle Nachrichten und schickt sie an alle teilnehmenden Clients. Eine kleine GUI beschreibt Ereignisse wie connect und disconnect von Benutzern. 3. Clients müssen beim Start der Applikation ihren Namen und eine IP-Adresse des Servers angeben und sind bei erfolgreichem Finden der Adresse mit dem Server verbunden. 4. Eine kleine GUI beim Client ermöglicht die Darstellung der Nachrichten, sowie die Namen der verbundenen Clients und ein Eingabefeld. Netzwerkprogrammierung 3. RMI Folie 18 von 19

19 Beispiel-Gui für die Applikation: 3. RMI Netzwerkprogrammierung Folie 19 von 19


Herunterladen ppt "Java für Fortgeschrittene Kurseinheit 06 Netzwerkprogrammierung Thomas Klutsch Florian Köttner Dienstag, 26. Juli 2011WS 2011/2012."

Ähnliche Präsentationen


Google-Anzeigen