Jugend forscht Logo

WebChat

Entwicklung einer systemunabhängigen Anwendung zur Live-Kommunikation über das Internet

Kurzfassung: Unsere Jugend-forscht-Arbeit besteht in der Entwicklung einer systemunabhängigen Anwendung zur Live-Kommunikation über das Internet. Bisherige Chat Systeme (sog. IRC's) waren recht umständlich zu installieren und zu handhaben. Wir haben uns daher zum Ziel gesetzt, ein auch für Internet-Einsteiger leicht verständliches Programm zu entwickeln. Als Programmiersprache verwendeten wir das plattformübergreifende Java von Sun Microsystems. Das von uns auf WebChat getaufte Programm funktioniert aus dem WWW ( World Wide Web ) heraus und ist daher auch für Anwender geeignet, die von ihrem Internet Provider nur Software für das WWW erhalten haben bzw. nutzen können. Darüber hinaus bietet WebChat dem Benutzer eine ausführliche Online Hilfe, die den Funktionsumfang von WebChat anhand von Beispielen erklärt.


Jugend forscht Logo
WebChat

Langfassung

Inhaltsverzeichnis

1.1 Nachteile bisheriger Chat Software
1.2 Aufgabenstellung

2.1 Überlegungen zum strukturellen Aufbau einer Chat Software
2.2 Der Griff zu Java

3.1 Erste Versuche mittels UDP's (unreliable datagram protocol)
3.2 Entwicklung eines Chat Servers, der auf Socket Verbindungen basiert
3.3 Entwurf des Clients

4.1 Testphase
5.1 Aktueller Befehlsumfang von WebChat
5.2 Geplante Verbesserungen

6.1 Literaturhinweise


1.1 Bisherige Chat Software
Die bisher im Internet üblichen Chat Systeme basieren auf sogenannten IRC-Servern( IRC=Internet-Relay-Chat). Die Software, die dafür auf der Benutzerebene nötig ist, hat aber einige Nachteile. Zum einen ist sie systemabhängig und deshalb braucht man für jedes Computersystem eine extra angepaßte Version. Außerdem ist die IRC Software meistens recht umfangreich (mehrere 100 KByte) und für Laien dürfte sich die Installation als recht schwierig erweisen.

1.2 Aufgabenstellung
Beim WebChat Projekt ging es uns darum, eine neuartige Chat Software zu entwickeln, die Probleme herkömmlicher Chat Programme löst und mit den angenehmen Eigenschaften des World-Wide-Webs verbindet. Dazu haben wir uns zuerst einen Anforderungskatalog erstellt, an dem wir unser Projekt ausrichten wollten. WebChat sollte folgende Eigenschaften haben:

2.1 Struktureller Aufbau einer Chat Software
Das Prinzip von Chat Systemen ist so gut wie immer das gleiche. Es gibt einen fest installierten Server auf denen sich die einzelnen Benutzer an- und abmelden. Eine vom Benutzer kommende Nachricht geht erst an den Server und wird von dort an alle angeschlossenen Benutzer verteilt. Eine mögliche Alternative wäre, das der Server nur die IP Nummern der Teilnehmer übermittelt, und das die Nachrichten vom Sender sternförmig an alle anderen Benutzer versandt wird. Letzteres verursacht aber eine gewisse Unsicherheit, da nicht sichergestellt ist, daß die Nachrichten auch tatsächlich beim Empfänger ankommen. Außerdem müßte die Client Software wesentlich umfangreicher sein. Deshalb haben wir uns für den ersten Ansatz entschieden. Dieser hat überdies den Vorteil, daß die Internetadressen der einzelnen Teilnehmer nur dem Server System bekannt sind und man daher auch anonym am Chat System teilnehmen kann.

2.2 Der Griff zu Java
Nun, wo wir uns über die Funktionsweise von WebChat im klaren waren, stellte sich für uns die Frage, mit welcher Programmiersprache wir unsere Projekt verwirklichen wollten. Im Prinzip gab es drei Möglichkeiten:

Da CGI eine mittlerweile "betagte" Technik, und deshalb auch etwas schwierig zu handhaben ist, haben wir die Programmierung über CGI schon sehr früh verworfen. JavaScript kam für uns ebenfalls nicht in Frage, weil es zum Teil gravierende Sicherheitslücken aufweist( aufgewiesen hat). Außerdem scheint JavaScript nur eine Zwischenlösung darzustellen und deshalb wäre es nicht zukunftsorientiert, weiterhin für JavaScript zu programmieren. Wir haben uns dann also für Java entschieden, denn Java hat einige Merkmale, die zum Großteil direkt auf das WebChat Projekt übergehen. Sun Microsystems, die Erfinder von Java, beschreiben Java wie folgt:

Java: A simple, object-orientend, distributed, interpreted, robust, secure, achritecture neutral, protable, high-performance, multithreaded, and dynamic language.

Besonders die Attribute robust, secure, achritecture neutral und portable waren für unsere Entscheidung für Java von hoher Bedeutung, da nur eine robuste Programmiersprache robuste Programme erzeugen kann. Java Interpreter, mit denen die Programme ausgeführt werden können, gibt es mittlerweile für fast jedes Computersystem und sind zumeist in die Internet Browser integriert. Die Java Technologie ist extrem zukunftsorientiert und so liest sich die Liste der Firmen, die Java unterstützen, wie ein "who is who" der Computerbranche. Sun Microsystems hat mit folgenden Firmen Lizenzverträge abgeschlossen: Netscape, Oracle, IBM, Symantec, Borland, Macromedia, Informix, Silicon Graphics, Toshiba, Adobe und sogar Microsoft haben die Leistungsfähigkeit von Java erkannt.

3.1 Erste Versuche mit Hilfe von UDP's
Eines der Hauptprobleme vom gesamten WebChat Projekt bestand darin, eine kontrollierte und stabile Verbindung zwischen Server und Client herzustellen. Bei unseren ersten Versuchen, um Daten zwischen Server und Applet auszutauschen, benutzten wir die UDP. Die Entwickler von Java haben hierzu die java.net.DatagramSocket Methode implementiert. Leider bestätigte sich unsere Vermutung, daß die Datagramme tatsächlich "unreliable" waren. Es kam des öfteren vor, daß die vom Client versandten Datenpakete irgendwo im Netz verlorengingen.

3.2 Entwicklung eines Chat Servers, der auf Socket Verbindungen basiert
Um eine ständige Verbindung zwischen Server und Client zu erhalten, benutzen wir die Socket Klasse von JAVA. Sie achtet darauf, daß die versandten Datenpakte auch beim Empfänger ankommen. Aber unser Chat Server muß noch mehr Aufgaben erfüllen, als nur die Verbindung aufrecht zu erhalten. Nach einiger Überlegung kamen wir zu folgenden Anforderungen:

Viele der oben genannten Funktionen müssen parallel ablaufen. Wir haben dieses Problem durch die THREAD-Technologie gelöst. Es gibt also einen Thread, der auf die Anmeldung neuer Clients wartet, einen, der die Verbindungen überwacht und einen, der die Nachrichten der Clients empfängt und verarbeitet. Die aktiven Clientsthreads werden in einem dynamischen Objectarray( Vector class) namens "connections" verwaltet und die empfangenen Nachrichten werden in "lines2send" Listen( für jeden Client eine) zwischengespeichert. Der Thread "Distributer" wertet die in den "lines2send" Listen gespeicherten Nachrichten aus. Je nach Nachricht verteilt er sie auf die entsprechenden Kanäle, oder bearbeitet die vom Client erhaltenen Befehle wie z.B. *SYSTEM* CHANNEL, *SYSTEM* USERLIST oder *SYSTEM* HELP. Um die Client Listen aktuell zu halten, gibt es einen "VULTURE" Thread, der in einem bestimmten Zeitintervall aufgerufen wird und "tote" Clients aus den Listen entfernt.

3.3 Entwurf des Clients
Die Clientsoftware ist der Teil von WebChat, der auf das Rechnersystem des Benutzers übertragen wird. Wir haben uns überlegt, daß die Bedienung sehr einfach sein sollte, da viele Web-Surfer kaum Erfahrung mit dem Medium Computer haben. Die technische Umsetzung ist dabei sehr einfach. Im Prinzip läuft das Programm wie in der Zeichnung dargestellt ab. Das Programm läuft dabei in externen Fenstern ab. Frühere Versionen der Client Software benutzten direkt die vom Browser dargestellte Seite als Ausgabebereich. Diese Methode hat aber den Nachteil, daß die Client Software auch noch weiterläuft, wenn der Benutzer auf eine andere Webseite gesprungen ist. Die Verbindung wurde also solange gehalten, bis der Browser vollständig geschlossen wurde. Um eine noch bessere Übersicht zu erhalten, haben wir dem Client gleich 2 Fenster spendiert. Das erste ist für Nachrichten und das zweite Fenster enthält die Meldungen vom WebChat Server. Die Steuerung( ändern von Kanal, Benutzername, usw...) funktioniert über die Kommandozeile im "Command Shell" Fenster. Nachrichten werden mit Hilfe der Eingabezeile im "Message Shell" Fenster abgesandt. Im "Command" Fenster befinden sich außerdem noch die Knöpfe "License" und "Help".

Dies ist das "Message Shell" Fenster des WebChat Clients

Die ist das "Command Shell" Fenster vom WebChat Client

4.1 Testphase
Natürlich haben wir während der ganzen Entwicklungszeit immer wieder Tests gemacht. Dabei stellte sich heraus, daß die aktuellen Java Interpreter den vom Compiler erzeugten Bytecode noch sehr unterschiedlich interpretieren und umsetzten. Die Windows95 Version vom Netscape Navigator z.B. ist nicht in der Lage, skalierbare Fenster richtig darzustellen. Generell hat der Navigator Probleme Fenster fehlerfrei zu zeichnen( das lästige Schmieren tritt häufig auf). Auf skalierbare Fenster haben wir deshalb verzichtet und auch sonst haben wir versucht, möglichst nur die erprobten GUI ( Graphical User Interface ) Elemente zu verwenden. Die praktische Erprobung lief größtenteils nicht im echten Internet ab, sondern wurde in einem simulierten Netzwerk ausgeführt. Zur besseren Kontrolle haben wir ein Logbuch Mechanismus in den Server eingebaut, der jede Aktivität in einer Datei mitprotokolliert. Nachdem wir Server und Client einigermaßen von Fehlern befreit hatten, installierten wir den Server auf Ansgars Computer, um es nun im echten Internet auszuprobieren. Wie erwartet funktionierte die WebChat Software einwandfrei und es dauerte nicht lange, bis einige "fremde" Besucher unser neues Chat System ausprobierten.

5.1 Aktueller Befehlsumfang von WebChat (stand vom: Dez. 1996)
Alle Befehle werden in die Commandozeile im "Command Shell" Fenster eingegeben.

Befehl                    Erklärung

HELP thema                Zeigt eine Hilfedatei zum optional angegebenen Thema
LICENSE			  Zeigt die Nutzungsvereinbarung an
USERNAME= meinname 	  Hiermit kann man seinen angezeigten Benutzernamen ändern
CHANNEL= 0..99 		  Wechselt auf den angegeben Kanal
USERLIST	          Listet alle auf dem Kanal befindlichen Benutzer auf
ROOT=ON= passwort 	  Bei richtigem Passwort, erhält der Benutzer Superuser Rechte
ROOT=OFF	          Die Superuser Rechte werden wieder entfernt
USERBREAK= benutzername   Entfernt den angegebenen Benutzer aus dem System. Für diesen Befehl
                          sind Superuser Rechte erforderlich
BREAK			  Bricht die Verbindung zum Server ab

5.2 Geplante Verbesserungen
Die bisher entwickelte Version von WebChat bietet noch vielseitige Möglichkeiten zur Verbesserung. Ein nächster Schritt wäre die Einführung von Kanalnamen, die dynamisch von den Benutzern geändert werden können. Als weiteres Feature könnte man eine "Mehrkanal-Lese / Einkanal-Schreib" Steuerung mit einbauen. Ebenfalls geplant ist eine Funktion, die es dem Superuser erlaubt, Mitteilungen an alle Kanäle gleichzeitig abzusenden. Darüber hinaus liessen sich auf der WebChat Software aufbauend, Spiele programmieren, die Online über das Internet ablaufen. Bei uns bestehen erste Überlegungen für ein Internet Schach Programm.

6.1 Literaturhinweise
David Flanagan, Java in a Nutshell, 1. Ausg., O'Reilly & Associates Inc.,
Sebastopol-Californien, ISBN 1-56592-183-6

Sun Microsystems GmbH, Java im Detail - Alles Wissenswerte über Java, Infoheft,
85630 Grasbrunn