Computer Science, Informatik 4
Communication and Distributed Systems
Softwarepraktikum Sommersemester 2007
Netzwerkprogrammierung in Java
Ralf Wienzek
Ulrich Loup
wienzek@i4.informatik.rwth-aachen.de
ulrich@i4.informatik.rwth-aachen.de
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