go to start Ueb W13
|home |print view |recent changes |changed December 16, 2009 |
exact
|You are 23.20.196.179 <- set your identity!

Sections: UDP Chit-Chat in C++ und Java | Aufgabe 1: Chat mit UDP | Optionale Erweiterung 1: | Optionale Erweiterung 2: | Aufgabe 2: Chat Client mit select() | Aufgabe 3 (Zusatz): Chat in Java | Abgabe für Testat |

UDP Chit-Chat in C++ und Java ^

13_Vorlagen.zip enthält den Code zum Vervollständigen (siehe //TODO: Kommentare).

Aufgabe 1: Chat mit UDP ^

Implementieren Sie einen UDP Chat Server analog des C++ UDP Echo Servers aus der Vorlesung (die Vorlage kompiliert, ist aber unvollständig!). Als test-client können Sie zuerst den UDP Echo Client aus der Vorlesung verwenden (code für Echo Client/Server liegt bei: udpdemo.cpp). Das erste Datagram sendet jeweils den Nickname eines Clients. Sendet ein Client ein Paket, das nur einen Punkt "." enthält meldet er sich vom Chat ab.

Bitte beachten Sie den Rahmen der Vorgabe, dort ist die Verwaltung der Client Informationen in einer std::map<struct sockaddr_in,std::string> gespeichert. Der Code-Rahmen beinhaltet die Mechanik um mit dieser Datenstruktur umzugehen.

Lösung:

Das Reactor Pattern wird benötigt, um verschiedene Ports gleichzeitig mit nur einem Thread zu bedienen. Da bei TCP für jeden Chatteilnehmer einen Port benötigt wird, kommt hier das Reactor Pattern auf der Serverseite zum Einsatz. Bei UDP wird auf der Serverseite immer der gleiche Port für die Kommunikation verwendet. Alle Chatteilnehmer kommunizieren über den gleichen Port. Dadurch genügt eine einfache While Schlaufe, welche ein Blockierendes Warten auf den UDP Port enthält. Dies ist bereits in der Vorlage ersichtlich.

Fazit: Das Reactor Pattern wird für den UDP Chatserver NICHT benötigt.

Optionale Erweiterung 1: ^

Wenn 2 Minuten lang kein client sendet, wird der Server beendet.

Optionale Erweiterung 2: ^

Wenn ein client 1 Minute lang nichts sendet, wird er vom Chat ausgeschlossen. (Schwierig)

Aufgabe 2: Chat Client mit select() ^

Implementieren Sie einen Chat Client in C++, der mittels select() gleichzeitig die Standardeingabe (File Descriptor 0) und den UDP Socket prüft. Je nachdem wo Daten vorhanden sind, werden diese an den Chat Server gesendet bzw. auf der Standardausgabe ausgegeben. Der Nickname wird als erstes Datagram an den Chatserver gesendet. Nutzen Sie dazu die Klassen UDPSocket und Datagram aus der Vorlage zur Aufgabe 1. Ausserdem ist ein Coderahmen vorgegeben. In der Funktion clientcomm() sollen Sie den select() Aufruf korrekt einfügen.

Nutzung des chatclient:

 chatclient  host port nickname

Aufgabe 3 (Zusatz): Chat in Java ^

Wenn Sie sich in Java sicherer fühlen, implementieren Sie den UDP Chat Server und ggf. auch den Client in Java.


Abgabe für Testat ^

Geben Sie Ihre Lösung für Aufgabe 1 und Aufgabe 2 aus dieser Woche per Email ab

Sie dürfen in kleinen Teams zusammenarbeiten und gemeinsam abgeben.

Abgabe bis Dienstag 15.12.2009 8:00 -> das heisst 7 Uhr 60 Minuten!


|home |print view |recent changes |changed December 16, 2009 |
exact
|You are 23.20.196.179 <- set your identity!

Ueb W13
go to start