|
Ueb W13
|
13_Vorlagen.zip
enthält den Code zum Vervollständigen (siehe //TODO: Kommentare).
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.
Wenn 2 Minuten lang kein client sendet, wird der Server beendet.
Wenn ein client 1 Minute lang nichts sendet, wird er vom Chat ausgeschlossen. (Schwierig)
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
Wenn Sie sich in Java sicherer fühlen, implementieren Sie den UDP Chat Server und ggf. auch den Client in Java.
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!
|
Ueb W13 |
|