Computer Science, Informatik 4 Communication and Distributed Systems Softwarepraktikum Sommersemester 2007 Netzwerkprogrammierung in Java Ralf Wienzek Ulrich Loup [email protected] [email protected] Computer Science, Informatik 4 Communication and Distributed Systems Grundlagen – Netzwerkprogrammierung TCP/IP - Referenzmodell Internet Layer: Internet Protocol (IP) Application Layer HTTP DNS Transport Layer Transport Layer TCP UDP Internet Layer IP Host-to-Network Layer ¾ Kommunikation zwischen 2 Rechnern ¾ Identifizierung: IP-Adresse ¾ Kommunikation zwischen 2 Anwendungen ¾ Identifizierung: Port-Nummern ¾ User Datagram Protocol (UDP) Î verbindungslos ¾ Transport Control Protocol (TCP) Î verbindungsorientiert, bidirektional Socket ¾ Kombination aus IP-Adresse und Port-Nummer ¾ Endpunkt eines Transport-Layer-Protokolls ¾ Beispiel: 137.226.12.194:80 TCP-Verbindung ¾ Besteht zwischen 2 Sockets ¾ Server hört auf einem definierten Port ¾ Client baut Verbindung zu Socket auf Netzwerkprogrammierung in Java, 2007 1 / 15 Computer Science, Informatik 4 Communication and Distributed Systems Grundlagen – Java-Klassen java.net.InetAddress Repräsentiert eine IP-Adresse Eigene IP-Adresse: InetAddress.getLocalHost(); java.net.DatagramSocket Endpunkt einer UDP-Kommunikation Sendet und empfängt java.net.DatagramPacket-Objekte UDP java.net.Socket Repräsentiert den Endpunkt einer TCP-Verbindung Unterstützt das Aufbauen von Verbindungen zu TCP-Servern java.net.ServerSocket Repräsentiert den Server-seitigen Endpunkt einer Verbindung Unterstützt das Warten auf Verbindungsanfragen TCP java.io.OutputStream, java.io.InputStream Senden und Empfangen von Daten, z.B. einer TCP-Verbindung java.lang.Thread Unterstützung von Nebenläufigkeit java.nio.ByteBuffer Hilfreich beim Versand und Empfang von Daten Netzwerkprogrammierung in Java, 2007 2 / 15 Computer Science, Informatik 4 Communication and Distributed Systems Grundlagen – UDP-Nachrichten Server Client DatagramSocket udpSocket; DatagramPacket udpMsg; DatagramSocket udpSocket; DatagramPacket udpMsg; try { udpMsg = new DatagramPacket( new byte[maxMsgLen], maxMsgLen ); udpSocket = new DatagramSocket( localUdpPort ); udpSocket.receive( udpMsg ); try { byte[] msgBytes = new byte[someLength]; compileMessage( msgBytes ); byte[] msgBytes = udpMsg.getData(); udpSocket.close(); } catch (Exception e) { // Reaktion auf Fehler } Netzwerkprogrammierung in Java, 2007 udpMsg = new DatagramPacket( msgBytes, msgBytes.length, server, port ); udpSocket = new DatagramSocket(); udpSocket.send( udpMsg ); udpSocket.close(); } catch (Exception e) { // Reaktion auf Fehler } 3 / 15 Computer Science, Informatik 4 Communication and Distributed Systems Grundlagen – TCP-Verbindung Server (137.226.12.194) Client ServerSocket serverSocket; Socket socket; InputStream in; OutputStream out; Socket socket; InputStream in; OutputStream out; try { serverSocket = new ServerSocket( 80 ); while ( someCondition ) { socket = serverSocket.accept(); try { in = socket.getInputStream(); out = socket.getOutputStream(); in.read(); computeResult; out.write( ... ); socket.close(); } serverSocket.close(); } catch (Exception e) { // Reaktion auf Fehler } Netzwerkprogrammierung in Java, 2007 socket = new Socket( "137.226.12.194", 80 ); in = socket.getInputStream(); out = socket.getOutputStream(); out.write( ... ); in.read(); doSomethingWithResult; socket.close(); } catch (Exception e) { // Reaktion auf Fehler } 4 / 15 Computer Science, Informatik 4 Communication and Distributed Systems Grundlagen – Netzwerkprogrammierung Server: Mehrere Verbindungen gleichzeitig bearbeiten Î Worker Threads ServerSocket serverSocket; Socket socket; WorkerThread wt; class WorkerThread extends Thread { private Socket socket; public WorkerThread( Socket socket ) { this.socket = socket; } try { serverSocket = new ServerSocket( 80 ); while ( someCondition ) { socket = serverSocket.accept(); public void run() { try { InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); wt = new WorkerThread( socket ); wt.start(); } serverSocket.close(); } catch (Exception e) { // Fehlerbehandlung } in.read(); out.write( ... ); socket.close(); } catch (Exception e) { ... } } } Netzwerkprogrammierung in Java, 2007 5 / 15 Computer Science, Informatik 4 Communication and Distributed Systems Client-Server-Modell Internet Casino – Zentraler Server Anwender starten Spiel-Server Spiel-Server Spiel-Server müssen beim Casino-Server registriert werden Spiel-Clients stellen Suchanfragen an den Casino-Server Casino-Server Probleme: ¾ Server ist Engpass ¾ Ausfall des Servers Î Peer-to-Peer-Netze Spiel-Client Netzwerkprogrammierung in Java, 2007 6 / 15 Computer Science, Informatik 4 Communication and Distributed Systems Overlay-Netze Logisches Netz TCP-Verbindung Physikalisches Netz Netzwerkprogrammierung in Java, 2007 7 / 15 Computer Science, Informatik 4 Communication and Distributed Systems Aufgabenstellung Internet Casino – Dezentral € Jeder Knoten verwaltet seine Spiel-Server lokal. Ist Server und Client Î Servent Gleichberechtigte Knoten bilden ein Overlay-Netzwerk Î Finden von Servents Î Finden von Spiel-Servern Anfragen werden im Netzwerk von den Knoten weitergeleitet Ping Query Query Pong Query Ping Pong Hit Pong Ping Pong Query Spieldurchführung über separate Verbindung Pong Hit Netzwerkprogrammierung in Java, 2007 8 / 15 Computer Science, Informatik 4 Communication and Distributed Systems Aufgabenstellung Spieldurchführung Kommunikation außerhalb des P2P-Netzwerk Client baut Verbindung zum Server auf Spielen um virtuelle Geldeinsätze € ¾ Spieler haben Konten bei Banken ¾ Spieler zahlen Einsätze auf Treuhandkonto bei vertrauenswürdiger Bank ein ¾ Nach Beendigung des Spiels erhält Gewinner die Einsätze auf sein Konto € Netzwerkprogrammierung in Java, 2007 9 / 15 Computer Science, Informatik 4 Communication and Distributed Systems Aufgabenstellung – Komponenten + Protokolle Bank Spiel 2 (Server) Spiel 1 (Client) THK Netzwerkprogrammierung in Java, 2007 CasinoServent BankServer Udp-PingDienst CasinoServent Bank Spiel 2 Normale Konten Treuhandkonten Spiel 2 (Client) Spiel 1 Bank-Server Spiel 1 (Server) Bank Konto UdpPing THK Startpunkt Verwaltet mehrere Konten Startet Spiele Startet Ping-Server P2P Casino-Servent Udp-PingDienst Konto Bank BankServer Bank 10 / 15 Computer Science, Informatik 4 Communication and Distributed Systems Aufgabenstellung Aufgabenpakete 1. Einführung in die Netzwerkprogrammierung TCP-Proxy für späteres Debugging Udp-Ping-Server und –Client Chat-Anwendung 2. Projektplan und Servent-Architektur Zeit- und Ressourcenplanung für Projektdurchführung Klassenstruktur für Servent 3. Servent: GUI-Gerüst und Kontenverwaltung Programmierung der Benutzeroberfläche Verwaltung (mehrerer) Konten innerhalb des Servents Auf-/Abbau von P2P-Verbindungen 4. Entwicklung der fehlenden Spielprotokolle Black-Jack vollständig vorgeben Vier-Gewinnt nicht spezifiziert Noch unbekanntes drittes Spiel Netzwerkprogrammierung in Java, 2007 11 / 15 Computer Science, Informatik 4 Communication and Distributed Systems Aufgabenstellung Aufgabenpakete 5. Servent: P2P-Protokoll Senden und Verarbeiten von P2P-Ping/Pong Senden und Verarbeiten von P2P-Query/QueryHit 6. Spiele programmieren Spiel-Server starten Spiel-Client für Suchergebnis starten Plugin-Mechanismus 7. Abschlusspräsentation Vorstellen des Servents 8. Crosstesten Gemeinsames Testen der Servents aller Gruppen Netzwerkprogrammierung in Java, 2007 12 / 15 Computer Science, Informatik 4 Communication and Distributed Systems Organisatorisches Termine Arbeiten zu Hause oder im Rechnerpool Pool-Reservierungen: lila Raum Dienstags: 14:00 – 18:00 Uhr Donnerstags: 9:00 – 12:00 Uhr Abnahmen der Implementierungsaufgaben ¾ Individuelle Terminabsprache ¾ Informatik-Rechnerpool 3 Gruppenpräsentationen ¾ KW 18: Zwischenpräsentation ¾ KW 20: Diskussion der Spielprotokolle ¾ KW 27: Abschlusspräsentation KW 28: Crosstesten Zusätzliche Betreuung und Abnahme nach Absprache Netzwerkprogrammierung in Java, 2007 13 / 15 Computer Science, Informatik 4 Communication and Distributed Systems Organisatorisches Abnahme von Implementierungsaufgaben Bis zum angegebenen spätesten Termin (frühere Abgabe ist möglich) Terminreservierung bis spätestens einen Tag vorher Anwesenheit aller Gruppenmitglieder Ablauf ¾ Vorführen des Programms ¾ Erklären des Programmdesigns anhand des Klassendiagramms ¾ Erklären des Quellcodes durch jeweiligen Programmierer ¾ Ausreichende Dokumentation der Lösung (Æ Javadoc) ¾ Beantwortung von Fragen zur Implementierung Danach: Elektronische Abgabe im Potions-System Scheinbedingung Ausreichende Beteiligung an der Lösung der Aufgaben Anwesenheit bei allen Terminen Erfolgreiche Abgabe aller Aufgaben durch eigenen Programmcode Netzwerkprogrammierung in Java, 2007 14 / 15 Computer Science, Informatik 4 Communication and Distributed Systems Organisatorisches Online Ressourcen Homepage: www-i4.informatik.rwth-aachen.de -> Teaching Interner Bereich Forum ¾ Diskussion, Ankündigungen ¾ Vorschläge für drittes Spiel ¾ Abstimmung über drittes Spiel Anmeldung zur Abnahme Subversion-Server Potions-Abgabesystem Referenzimplementierungen Netzwerkprogrammierung in Java, 2007 15 / 15