Angabe der Übungsbeispiele der CN 2005


17.02.2005

HINWEIS: Vergessen Sie bitte auf keinen Fall, Ihre Abgaben in das Abgabeverzeichnis des jeweiligen Beispieles zu stellen (siehe unten unter Abgaben).

HINWEIS: Beachten Sie bitte den Notenschlüssel und die Codierungsregeln am Ende dieses Dokumentes!!!


17.02.2005

Allgemeines

Jedes der folgenden APIs erfordert die Kommunikation zwischen zwei Programmen, einem Server und einem Client. Bei jedem dieser Programmpaare erfolgt die gegenseitige Identifikation (Adressierung) über einen etwas anderen Mechanismus. Grundsätzlich gilt jedoch, daß immer die Laborübungs-Gruppennummer zur Adressierung des jeweiligen Partner-Programmes herangezogen wird.

Welche Gruppennummer Sie bzw Ihre Gruppe zugeordnet bekommen haben, erfahren Sie im CN Anmeldestand (+ Ergebnisse).

Da Sie beim Testen Ihrer Applikationen vielleicht verschiedene Kennungen (Adressen) für ihre eigenen Programme benötigen, stehen Ihnen sogenannte Gruppencodes zur Verfügung. Jede Übungsgruppe erhält eine Menge von 4 Gruppencodes zugeordnet, die nach der Regel

Gruppencodes <gc> = {x | x = Gruppennummer + k * 100 (für k = 0,1,2,3)}

gebildet werden. Gruppencodes müssen immer dreistellig sein und müssen daher eventuell mit führenden "0"-en versehen werden:

<gc1> ::= { 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 }
<gc>  ::= <gc1><gc1><gc1>

Der Laborübungsgruppe 4 stehen daher beispielsweise die Gruppencodes

<gc> = { 004, 104, 204, 304 }

zur Verfügung. Diese vier Codes können in den verschiedenen Beispielen verwendet werden und sind auf jeden Fall innerhalb der LVA eindeutig.

.

Beispiel 1 - UDP Chat

In diesem Beispiel soll ein Chat-System implementiert werden. Dieses besteht aus einem Java-Applet (dem Client), das das User-Interface realisiert und einer Java-Applikation, die den Server bildet. Die Server stehen untereinander in Kontakt. Alles, was ein Server von seinen Clients empfängt, sendet er an alle ihm bekannten Server weiter, die es daraufhin ihrerseits ihren Clients weitergeben.

Begriffe

Chatter Ist ein Benutzer des UDP-Chat-Systems. 
Nickname Ist ein "Spitzname", unter dem ein Benutzer des UDP-Chat in diesem bekannt ist und unter dem er auch direkt angesprochen werden kann.
Nickname des Senders Der Nickname, der den Sender der Nachricht eindeutig identifiziert. Es kann zu einem Zeitpunkt immer nur einen Benutzer mit einem bestimmten Nickname im UDP-Chat-System geben.
Nickname des Empfängers  Der Nickname, der den Empfänger der Nachricht eindeutig identifiziert. Als Empfänger-Nickname ist auch der String "*" (ein Sternchen) zulässig. Dies bedeutet: Empfänger sind alle Benutzer des UDP-Chat-Systems.
Message  Ist derjenige Text, den ein Chatter an andere Chatter und sich selbst sendet. Eine Message ist maximal 60 Zeichen lang, wenn sie vom Client kommt und wird vom Server mit den entsprechenden Informationen erweitert.

Client

Der Client ist ein Java-Applet und verfügt zumindest über die folgenden Elemente: Die Parameter des Applets sind:

Server

Der Server ist eine Java-Application und wird mit den folgenden Parametern per Kommandozeile versorgt: Der Server versucht, immer alle bei ihm entstehenden Messages an alle in der Kommandozeile angegebenen Server weiterzuleiten. Jeder Server verwendet seinen Port sowohl zum Senden als auch zum Empfangen.

Der Server kann Debugging-Meldungen auf die Console (System.out) schreiben.

Implementierung

Client und Server kommunizieren per UDP, also verbindungslos. Achten Sie darauf, daß der Server alle Messages, die er von einem Client erhält, mit dem Nickname des Senders markiert und erst dann an die anderen Server weiterleitet.

Ob ein Nickname mehrfach vorkommt, muß von den Servern geprüft und verhindert werden. Der Button "Set Nickname" dient dazu, diesen Test auf Eindeutigkeit des Nicknames im gesamten Chat-System zu prüfen. Ein Nickname gilt nur dann als zugewiesen, wenn er im System eindeutig ist. Vorher können keine Messages gesendet werden. Messages, die an alle (Nickname "*") gesendet wurde, werden aber empfangen.

Wenn als Nickname für den Empfänger ein Stern ("*") verwendet wird, soll die Nachricht immer an alle Benutzer (Clients) gesendet werden. Wird als Empfangs-Nickname ein bestimmter Name angegeben, so soll diese Nachricht nur an diesen Nickname gesendet werden. Gibt es den Nickname im System nicht (mehr), geht die Meldung "ins Leere" (es wird kein Fehler gemeldet).

Die Clients sind die aktiven Parts bei der Client-Server Kommunikation. Jeder Client pollt seinen Server (in einstellbaren Intervallen) auf neue Nachrichten. Wird der "Send"-Button aktiviert, so sendet der Client seine Message sofort. Der Server sendet jede eintreffende Message sofort an alle anderen Server. Das System soll so implementiert werden, dass auch bei einem sehr kurzen Polling-Intervall die Kommunikation der Clients und Server einwandfrei funktioniert.

Der Server muß eine Liste der letzten empfangenen Messages halten (dieser Puffer kann eine fixe Größe haben), in der er die Messages für alle ihm bekannten Clients aufbewahrt, bis jeder ihm bekannte Client sich die Message abgeholt hat.

Ein Server streicht einen Client aus der Liste der ihm bekannten Clients, wenn sich der Client eine fixe Zeitspanne lang nicht gemeldet hat (Server-Parameter: Client-Timeout). Damit wird auch der Nickname dieses Clients wieder "frei". Ein Server kann mehrere Clients versorgen.

Di minimale Länge der Messages soll 60 Zeichen betragen. Wird eine Message abgeschickt, so bleibt sie im Textfeld "Message" erhalten, sodass sie sofort nochmals gesendet werden kann.

Abgabe

Minimale Konfiguration für die Abgabe: Szenario für die Abgabe:

.

Beispiel 2 - TCP Mail

Als zweites Beispiel wird ein einfaches eMail-Programm erstellt. Der Client ist eine Java-Application, der Server ebenfalls. Der Client sendet emails direkt an den Ziel-Server. Dieser speichert sie zwischen, bis sie gelöscht werden. Der Client besteht aus einer Sende-Seite und einer Empfangs-Seite, was sich auch in der Benutzerschnittstelle wiederspiegelt.

Client

Der Client ist eine Java-Application und verfügt zumindest über die folgenden Elemente: Die Parameter des Clients lauten: Der Client sendet seine emails immer sofort an den Server. Der Client findet den Server über den im Textfeld "Empfänger" eingegebenen Usernamen, Hostnamen und den Port, den er als Parameter mitgegeben erhält. Der Client sendet seine email beim Aktivieren des Buttons "Senden" an den Server.

Server

Der Server ist eine Java-Application und wird mit den folgenden Parametern per Kommandozeile versorgt: Der Server läuft als Hintergrundprogramm und hat keine spezielle Benutzerschnittstelle. Die Systemausgabe des Servers kann für Debugging-Meldungen verwendet werden.

Jeder Server verwendet seinen Port sowohl zum Senden als auch zum Empfangen.

Implementierung

Client und Server kommunizieren per TCP, also verbindungsorientiert.

Der Server muß den Erhalt der email dem Client gegenüber bestätigen und die email dann abspeichern. Zum Abspeichern am Server wird eine lokale Datei verwendet (bitte im ASCII-Format - also als Klartext - abspeichern und ein möglichst einfaches implementierbares Format wählen).

Die email bleibt solange in der Datei, bis sie von einem Client explizit gelöscht wird. Der Server gibt diejenigen emails aus seiner Datei an einen Client weiter, die an diesen Client adressiert sind. Der Client muß sich also dem Server gegenüber identifizieren.

Der Client holt nur die Subjects und Senderadressen der emails beim Verbindungsaufbau vom Server ab. Die Texte der emails werden erst per Button "Lesen" geholt.

Der Client pollt den Server mittels des Buttons "Holen". Beim Verbindungsaufbau mit dem Server werden die Subjects und Senderadressen aller eingetroffenen emails in den Client geladen.

Der Client muss nicht anzeigen, an wen sonst noch eine empfangene email gesendet wurde.

Abgabe

Minimale Konfiguration für die Abgabe: Szenario für die Abgabe: .

Notenschlüssel
 
Die Noten der VL werden zu 60% aus dem schriftlichen Abschlusstest und zu je 20% aus den beiden LU-Beispielen ermittelt. Ein erfolgreich abgegebenes Beispiel bringt daher zB 10 Punkte für das Haus Gryffindor - ups, ich meine natürlich für die VL. Punkte aus der LU werden allen Gruppenmitgliedern angerechnet, die Punkte aus dem Test werden für jeden getrennt gezählt. 

2 Beispiele gelöst 20 Punkte
1 Beispiel gelöst 10 Punkte
kein Beispiel gelöst
0   Punkte
Ergebnis des schriftlichen Tests
0-30 Punkte
Notenschlüssel gesamte VL

0-25 Punkte
N5
26 - 31
G4
32 - 37
B3
38 - 43
U2
44 - 50
S1

.
Abgaben

Die Abgabe für jedes Beispiel besteht aus

und Für die einzelnen APIs sind im Home-Directory Ihrer CN-Gruppe unter Unix  die Directories "udp" und "tcp" anzulegen. In diesen Directories sind die Sourcen und die Binaries für die jeweilige Abgabe abzulegen samt einem Shell-Script zum Starten von Clients und Servern. Bitte NUR diese Files in die Abgabedirectories stellen. Beim Abgabetermin sollten alle Gruppenmitglieder anwesend sein. Bitte immer die NEWS im "CN Home" beachten!

Als syntaktische Form des Kommentierens in den Sourcen wird folgendes vorgeschlagen:

/*
        Der Kommentar steht hier und ist einen Tabstop eingerückt.
        Folgezeilen sind ebenfalls einen Tabstop eingerückt angeordnet.
*/

Für die Dokumentation gelten die folgenden Regeln:

Jede abzugebende Datei erhält einen Kopf in der folgenden Form:

/*
        LVA:      COMPUTER NETWORKS VL SS 2005
        GRUPPE:   99
          Manfred MUSTER, E880, 9968040
          Norbert NORM,   E880, 9932032
          Tanja   TEST,   E880, 9980486
        BEISPIEL: UDP
        DATEI:    xxx.java
        ABGABE:   30.06.2005
*/

Jedes Programm / Programmsystem sollte in Klassen aufgegliedert werden, die jeweils günstigerweise nicht länger als eine Druckseite (ca. 60 Zeilen) sind.

Jede Klasse muß in ihrer Funktionalität kurz beschrieben werden (ca. 2 bis 10 Zeilen).

Alle Klassen- und Instanz-Variablen sind in ihrer Verwendung ausreichend zu beschreiben (je 2 bis 10 Zeilen).
 

Copyright © 1997, 1998, 1999, 2000, 2001, 2004, 2005 Dr. Christian Demuth

Most recent revision 17.02.2005 via localsystems@infosys
Original revision via ftp://hpv17.infosys.tuwien.ac.at/home/hpv17/webby/docs/Staff/cd/
Y2K revision via ftp://pent21.infosys.tuwien.ac.at/home/WWW/People/cd/