75 lines
3.8 KiB
Plaintext
75 lines
3.8 KiB
Plaintext
Entwickeln Sie eine Klasse KlausurenServer, mit der verwaltetet werden kann,
|
|
welche Klausuren ein(e) Student/-in mitschreiben möchte.
|
|
Zu einer Mail-Adresse werden dabei die IDs der Klausuren gespeichert, z.B.
|
|
|
|
max.mueller@stud.hs-emden-leer.de: 34, 45, 56
|
|
peter.meier@stud.hs-emden-leer.de: 1, 8, 34, 67
|
|
axel.maier@stud.hs-emden-leer.de: 34, 56
|
|
...
|
|
|
|
Intern werden diese Daten als (key,value)-Paare in einer Map gespeichert, wobei als key die Mail-Adresse verwendet wird.
|
|
Der Konstruktor der Klasse KlausurenServer erhält als Parameter den Port, auf dem Anfragen entgegengenommen werden.
|
|
Jede Anfrage besteht aus einer Textzeile, die eines der nachfolgend beschriebenen Kommandos enthalten darf,
|
|
wobei die Kommandos groß oder klein geschrieben werden können.
|
|
Als Antwort wird eine Textzeile zurückgeschickt, die immer mit 0 (Misserfolg) oder 1 (Erfolg) beginnt.
|
|
Die (key,value)-Paare sollen auch nach einem Stoppen und Starten des Servers erhalten bleiben
|
|
und müssen somit in einer Datei gespeichert werden.
|
|
|
|
PUT key newvalue -> 1 oldvalue
|
|
Trägt unter dem Schlüssel key den Wert newvalue ein. Die Antwort besteht aus einer 1 und dem alten Wert des Schlüssels.
|
|
Beim ersten Eintrag ist oldvalue ein leerer String. Falls newvalue Leerzeichen enthält, sollen diese entfernt werden.
|
|
GET key -> 1 value oder 0
|
|
Liefert den Wert, der unter dem Schlüssel key eingetragen ist.
|
|
Die IDs der Klausuren werden dabei immer aufsteigend sortiert zurückgegeben.
|
|
Wenn der Schlüssel nicht bekannt ist, ist die Antwort 0.
|
|
DEL key -> 1 oldvalue oder 0
|
|
Löscht Schlüssel und Wert und liefert den gelöschten Wert zurück.
|
|
Wenn der Schlüssel nicht bekannt war, wird 0 zurückgeliefert.
|
|
GETALL -> 1 value oder 0
|
|
Liefert eine Auflistung aller Klausurenwahlen.
|
|
Wenn die Wahl eines/einer Studierenden in der Wahl eines/einer anderen Studierenden enthalten ist,
|
|
fällt diese für diese Anfrage weg.
|
|
Beim obigen Beispiel würde die Wahl von Axel Maier entfallen,
|
|
da diese Klausuren auch von Max Mueller gewählt wurden. value soll in folgender Form zurückgegeben werden:
|
|
[34,45,56],[1,8,34,67]
|
|
Falls (noch) keine Klausurenwahlen vorhanden sind, wird 0 zurückgegeben.
|
|
STOP -> 1
|
|
Beendet den Dienst und somit den Server.
|
|
|
|
Eine main-Methode liest von der Kommandozeile einen Port ein, legt ein KlausurenServer-Objekt an und startet den Server.
|
|
Der KlausurenServer arbeitet ähnlich wie ein Webserver.
|
|
Er verarbeitet jede Anfrage einzeln in einem eigenen Thread(!) und unabhängig von anderen Anfragen.
|
|
Die Verbindung zum Client wird nach jeder Antwort wieder geschlossen.
|
|
Ein Client, der mehrere Anfragen abwickeln möchte, muss für jede Anfrage eine neue Verbindung zum Server aufnehmen.
|
|
Ein solches Protokoll wird als "zustandslos" bezeichnet, weil mit jeder Anfrage eine neue Kommunikationssequenz beginnt,
|
|
die keine Informationen aus früheren Anfragen voraussetzt.
|
|
Praktisch alle Betriebssysteme enthalten einen Telnet-Client, mit dem der Klausurenserver getestet werden kann.
|
|
Dieser muss bei Windows-Systemen aber ggfls. nachinstalliert werden.
|
|
Das folgende Beispiel zeigt den Dialog auf einem Unix-System.
|
|
Der KlausurenServer wurde in einem anderen Terminal gestartet und läuft bereits.
|
|
Zur Vereinfachung sind die Protokollausgaben des Telnet-Clients ausgeblendet:
|
|
|
|
$ telnet localhost 2000
|
|
put max.mueller@stud.hs-emden-leer.de 34,45,56
|
|
1
|
|
$ telnet localhost 2000
|
|
put axel.maier@stud.hs-emden-leer.de 34, 56
|
|
1
|
|
$ telnet localhost 2000
|
|
getall
|
|
1 [34,45,56]
|
|
$ telnet localhost 2000
|
|
put max.mueller@stud.hs-emden-leer.de 34, 45
|
|
1 34,45,56
|
|
$ telnet localhost 2000
|
|
get max.mueller@stud.hs-emden-leer.de
|
|
1 34,45
|
|
$ telnet localhost 2000
|
|
del max.mueller@stud.hs-emden-leer.de
|
|
1 34,45
|
|
$ telnet localhost 2000
|
|
get max.mueller@stud.hs-emden-leer.de
|
|
0
|
|
$ telnet localhost 2000
|
|
stop
|
|
1 |