VSIS: Arbeitsgruppe Verteilte Systeme und Informationssysteme prInt: Das Praktikum Internet-Werkzeuge  Praktikum Internet-Werkzeuge   Fachbereich
  Aufgaben  Dokus  Links   Universität Hamburg

 Aufgabe 10: ChatClient

Implementiert einen ChatClient für die Kommunikation mit unserem ChatServer, der auf der vsisls3 an Port 7777 erreichbar ist. Als Ausgangsbasis sollt Ihr dieses Rohgerüst verwenden. Für den Client ist bereits ein simples graphisches User Interface (GUI) vorgegeben, das Euren Client über das IChatClient Interface aufruft. Die Methoden, die Euer Client auf dem GUI aufrufen kann sind im IChatGUI Interface aufgeführt.

 Was macht denn so ein ChatClient?

Der Client soll eine Socket-Verbindung zum Server öffnen, Text vom Server im Ausgabebereich des GUIs ausgeben und Text, den Ihr in der Eingabezeile des GUIs eingebt, zum Server schicken. Verwendet dazu (ebenso wie der Server) einen DataInputStream (bzw. DataOutputStream) und die Methoden readUTF (bzw. writeUTF).

 Wie sollen wir das machen?

Macht den ChatClient funktionsbereit. Dazu müssen der Konstruktor, die connect, send, quit und run Methode implementiert werden.

In der connect Methode geht es darum die Socket Verbindung mit dem Server aufzubauen. Sofern die Socket Verbindung erfolgreich initialisiert ist, könnt ihr jeweils einen DataInput- und einen DataOutputStream für die Kommunikation erstellen. Ausserdem sollte sofern alles geklappt hat, ein Receiver Thread erzeugt und gestartet werden, der es erlaubt fortlaufend die Nachrichten des Servers zu empfangen.

Die send Methode hat die Aufgabe Text, den der User im GUI eingegeben hat, an den Server zu schicken. Verwendet hierzu die writeUTF() Methode auf dem Eurem DataOutputStream.

Die quit Methode soll den Receiver Thread auf saubere Weise (nicht über stop()!) beenden und dann die Anwendung beenden.

Der von Euch in der connect Methode erzeugte Receiver Thread führt die run Methode aus. An dieser Stelle sollt Ihr also Nachrichten vom Server lesen und ans GUI weiterreichen (Verwendet dazu die blockierende Methode readUTF()).

 Bonusaufgaben

In Eurer ersten Version leitet Ihr die Benutzereingaben direkt an den Server weiter. Ermöglicht es dem Benutzer, dass er sich erneut verbinden kann, wenn er /connect als Befehl eingibt. Dazu ist es notwendig diesen speziellen Befehl in der send() Methode abzufangen und die connect() Methode aufzurufen. (1 Punkt)

Es gibt nichts schlimmeres als einen leeren Chat. Damit sich der erste User nicht so verloren fühlt sollt Ihr einen einfachen Chatter-Bot entwerfen. Dieser hat die simple Aufgabe auf die Nachrichten im Chat zu reagieren und sie zu kommentieren, wenn bestimmte Stichwörter darin enthalten sind. Eine andere Einsatzmöglichkeit wäre auch ein Manieren-überwachungs-Bot, der alle User kickt, die bestimmte Schimpfwörter in den Chat posten (wenn Ihr einen solchen Bot schreibt, bekommt Ihr von das Magic-Op-Command um Operator Status zu erlangen).(2 Punkte)

 Tipps

Um die Netzwerkkommunikation zu implementieren müsst Ihr häufig Exceptions abfangen. Da man als Programmierer nicht verhindern kann, dass man ab und zu keine Netzwerkverbindung bekommt (z.B. weil der Server down ist), ist es am Besten, entsprechende Fehlermeldungen auch an das GUI weiterzuleiten, damit der Benutzer weiß was los ist.

Aufgrund der Sicherheitsbestimmungen des Rechenzentrums kann unser Chat leider nicht von aussen zugegriffen werden. Wenn Ihr gerne von zu Hause aus weiter arbeiten möchtet könnt Ihr hier die Server-Sourcen herunterladen Server, ChatHandler und den Server einfach bei Euch zu Hause lokal starten.

Viel Spaß


Mi 12-16 Uhr Raum: B-201 und RZ Start: 05.04.2006
Eine Veranstaltung des Arbeitsbereichs Verteilte Systeme und Informationssysteme (VSIS)

Letzte Änderung : 22.06.2006 - 17:14
EMail: prInt06@vsis.informatik.uni-hamburg.de