Softwarepraktikum Sommersemester 2007

Werbung
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
Herunterladen