Dies ist mein erstes kleines Chat Programm. Es funktioniert sowohl im LAN als auch im Internet. Es verwaltet beliebig viele Channels und kann im kleinen Rahmen auch administriert werden. | ![]() |
![]() |
![]() |
![]() |
Chat ist ein kleines Programm, in dem ein Chat-Server und ein entsprechender Client enthalten ist. Personen an unterschiedlichen Lokationen (Internet und auch LAN) können sich wie im IRC miteinander unterhalten. Die einzelnen Chat-Räume (Channels) können in einen sogenannten "Einladungsmodus" gesetzt oder auch "moderiert" werden. Der Server verwaltet grundsätzlich eine unbestimmte Anzahl an Channels und Benutzern.
Da der Chat in Java entwickelt wurde, ist eine Java Runtime Environment
(JRE) oder ein Java Development Kit (JDK) zum Ausführen des Chats
notwendig. Es muss beachtet werden, dass mindestens die Version 1.3.1 des
JRE/JDK eingesetzt wird.
Downloads des JRE/JDK gibt es unter:
Leider kann die Anwendung nicht mit einem einfachen Klick auf das Batch-File gestartet werden. Man muss zumindest die in den Kapitel 2.1, 2.3, 2.4 und 2.5 angesprochenen Einstellungen/Anpassungen vornehmen, um den Chat Server starten zu können. Der Client muss entsprechend den Kapitel 3.1 und 3.3 angepasst werden.
README.txt | Dieses Readme File | |
Server.ini | Konfigurationsfile für den Server | X1) |
Client.ini | Konfigurationsfile für den Client | X |
chat-classes13.zip | Enthält die class-Files für den Client und den Server | |
StartServer.bat | Batch-File zum Starten des Servers | X |
StartClient.bat | Batch-File zum Starten des Clients | X |
\dat\IRC.template | Template File für die IRC ähnlichen Commands | |
\dat\MSG.template | Template File für die MSG Commands | |
\dat\Error_en.properties | Enthält die Fehlermeldungen des Servers | |
\channel\ | Default Verzeichnis in das die Channels ihre Daten ablegen | |
\log\ | Default Verzeichnis in das die Log-Files abgelegt werden | |
\config\Server_ex.ini | Beispiel-Konfigurationsfile für den Server | |
\config\Client_ex.ini | Beispiel-Konfigurationsfile für den Client | |
\config\Server.in_ | Sicherheitskopie des Server-Konfigurationsfiles | |
\config\Client.in_ | Sicherheitskopie des Client-Konfigurationsfiles |
1) die mit X gekennzeichnteten Einträge müssen angepasst werden
2.1. Server-Konfigurationsfile anpassen
Zunächst sind die Eintragungen in der »Server.ini« zu überprüfen1). Damit der Server gestartet werden kann, müssen die Einträge:
Bei
Die übrigen Eintragungen müssen nicht angepasst werden.
1) mit der Version 1.0.2 sind in dem Konfigurationsfile default-Eintragungen vorhanden, damit für einen »schnellen« Start diese Eintragungen/Anpassungen nicht vorgenommen werden müssen. Nichtsdestotrotz sollten die Daten für einen »eigenen« Server angepasst werden.
[CONNECTION] | ||
server.protocol | Definiert das Netzwerkprotokoll. Ist kein Wert eingetragen, wird
TCP genutzt. Möliche Eintragungen sind RMI oder TCP. Das Protocoll RMI kann fü das Internet nicht genutzt werden |
|
server.host | Definiert die IP-Adresse, auf die der Chat-Server aufsetzen soll. Soll der Chat-Server im Internet erreichbar sein, ist die IP-Adresse, die der Internet-Provider dem RechnerClient zugeteilt hat, einzutragen | X1) |
server.port | Definiert den Port, auf dem die Kommunikation erfolgen soll. Standardeintragung ist 1285 | |
server.bind | Definiert den »Bind«-Namen. Unter diesem Namen wird das
zugehörige Java-Objekt im Rechner (RMIRegistry) registriert.
Clients suchen das Server-Objekt unter zuhilfenahme dieses Namens. Der Standardname sollte daher NICHT geändert werden |
|
[SERVER] | ||
server.name | Der Name des Servers. Zum erfolgreichen Starten des Servers muss eine Eintragung vorhanden sein | X |
server.comment | Ein Kommentar für den Server. Zum erfolgreichen Starten des Servers muss eine Eintragung vorhanden sein | X |
server.pw | Zum Setzen eines Passworts für den Server. Ist ein Passwort gesetzt, müssen die Clients beim CONNECT das Passwort angeben | |
server.user.limit | Setzt eine Obergrenze an gleichzeitig auf dem Server befindlichen Benutzern | |
server.admin.name | Der Name des Administrators. Zum erfolgreichen Starten des Servers muss eine Eintragung vorhanden sein | |
server.admin.pw | Das Kennwort für den Administrator. Zum erfolgreichen Starten des Servers muss eine Eintragung vorhanden sein | |
server.admin.email | Die e-Mail des Administrators. Zum erfolgreichen Starten des Servers muss eine Eintragung vorhanden sein | |
errorfile | Definiert den Standort des Errorfiles
»error_en.properties«. Das File muss über die
Dateistruktur erreichbar sein (darf also NICHT in einem Archivfile
(zip,jar,arj...) abgelegt sein. Die Eintragung wird als relative Pfadangabe zum aktuellen Arbeitsverzeichnis verstanden. Ist z.B der Server in D:\Programme\Chat installiert und die Eintragung zu errorfile ist: errorfile=files\Error_en.properties muss das File im Verzeichnis: D:\Programme\Chat\ files\Error_en.properties abgelegt sein |
|
[LOGGING] | ||
log.server.console | Gibt an, ob der Server Ausgaben in die Konsole loggen soll (true) oder nicht (false) | |
log.server.file | Definiert das zu benutzende Logfile für den Server.
Mögliche Werte sind:
Beispiele: |
|
log.server.level | Definiert den entsprechenden Loglevel (0-10) 2) | |
log.channel.console | Gibt an, ob die einzelen Channels Ausgaben in die Konsole loggen sollen (true) oder nicht (false) | |
log.channel.path | Definiert den Pfad, in den die einzelen Channels ihr Logfile
ablegen sollen. Mögliche Werte sind:
Beispiele: |
|
log.channel.level | Definiert den entsprechenden Loglevel (0-10) 2) | |
[VERWALTER] | ||
user.verwalter.wait | Definiert das Zeitinterval in Millisekunden, nach der die
Benutzerverwaltung nach »verlorenen«
3) Benutzern sucht.
»Verlorene« Benutzer werden aus der Benutzerverwaltung
entfernt. Je geringer der eingestellte Wert ist, desto häufiger sucht die Verwaltung nach »verlorenen« Benutzer, was aber auch zur Folge hat, dass der Server mehr belastet ist. Längere Wartezeiten entlasten den Server, können aber dazu führen das nicht mehr vorhandene Benutzer bis zum nächsten Suchlauf noch verwaltet werden. |
|
channel.verwalter.wait | Definiert das Zeitinterval in Millisekunden, nach der die
Channelerverwaltung nach »verwaisten«
4) Channels sucht.
»Verwaiste« Channels werden aus der Channelverwaltung
entfernt. Je geringer der eingestellte Wert ist, desto häufiger sucht der Verwalter nach »verwaisten« Channels, was aber auch zur Folge hat, dass der Server mehr belastet ist. Längere Wartezeiten entlasten den Server, können aber dazu führen das »verwaisten« Channels bis zum nächsten Suchlauf noch verwaltet werden. |
|
[CHANNEL] | ||
channel.savepath | Definiert den Pfad, in der die einzelnen Channels ihre
Informationsdatei (*.ch) schreiben. Mögliche Werte sind:
Beispiele: |
|
channel.wait | Definiert das Zeitinterval in Millisekunden, nach der der einzelne Channel nach »verlorenen« 3) Benutzern sucht. »Verlorenen« Benutzer werden aus dem Channel entfernt (aber nicht automatisch aus der Benutzerverwaltung) | |
reserved[0...n] | Definiert einen reservierten Channelnamen. Es können
beliebig viele Einträge in der INI enthalten sein. Je Eintrag
darf immer nur ein Channelname angegeben werden. Für
eine eindeutige Identifizierung sollte dem Channelname der
Präfix # vorangestellt werden.
Beispiel: |
1) die mit X gekennzeichnteten
Einträge müssen angepasst werden
2) über den Loglevel können
Systemausgaben gesteuert werden. Der Loglevel 10 bewirkt, dass die
Anwendung keine Ausgaben erzeugt. Bei Loglevel 0 werden alle relevanten
Daten ausgegeben. Für die Fehlersuche sollte daher der Level 0
eingestellt werden
3) »Verlorene« Benutzer sind
Benutzer, die sich nicht ordnungsgemäß am Server abgemeldet
haben. Dies kann daran liegen, dass der Benutzer die Chat Client
Anwendung nicht ordentlich beendet hat, dass die Internet- (Nezwerk-)
verbindung abgebrochen ist oder ein sonstiger Fehler aufgetreten ist.
4) »Verwaiste« Channels sind
Channels, in denen sich kein Benutzer mehr befindet
Im zip-File »void-chat.zip« ist das Batch-File
»StartServer.bat« enthalten, daß an die Installation
der Java Runtime Umgebung (Java Runtime Environment = JRE) angepasst werden
muss:
Hier muss die Zeile
set JDK=D:\Programme\Java\JDK1.3\jre
set classpath=%JDK%/lib/rt.jar;.;chat-classes13.zip;
%JDK%/bin/java de.y.chat.server.ServerMain
an die Installation der JRE auf dem Rechner angepasst werden.
set JDK=
Beispiel:
Hat man die JRE unter
D:\Programme installiert, so befindet sich dort folgende
Ordner-Strukur:
D:\Programme\JRE
oder
D:\Programme\JDK\JRE
(wenn man das Java Development Kit installiert hat).
Die Eintragung in der raquo;StartServer.bat« muss dann
folgendermaßen angepasst werden:
set JDK=D:\Programme\JRE
(oder set JDK=D:\Programme\JDK\JRE)
Innerhalb des Batch-File »StartServer.bat« kann dem zu
startenden Java-Programm ein spezielles Konfigurationsfile übergeben
werden:
/ini=Name des Ini-Files (zur Übergabe eines speziellen
»Server.ini« Files)
Beispiel:
%JDK%/bin/java de.y.chat.server.ServerMain /ini=myServer.ini
Damit der Server erfolgreich gestartet werden kann, muss der JRE noch
bekanntgegeben werden, dass die Anwendung die entsprechenden Rechte
erhält.Dazu öffnet man das File »java.policy«,
welches sich im JRE Ordner unter JRE\lib\security\
befindet. Hier muss man unter den Zeilen:
// Standard extensions get all permissions by default
grant codeBase "file:${java.home}/lib/ext/*" {
permission java.security.AllPermission;
};
die folgenden Zeile(n) hinzufügen:
grant codeBase "file:/
permission java.security.AllPermission;
};
Anschliessend sucht man die Zeile
permission java.net.SocketPermission "localhost:1024-", "listen";
und ändert diese in
permission java.net.SocketPermission "localhost:1024-",
"listen,accept,connect,resolve";
Soll der Chat-Server auf einem Rechner laufen, für den mehrere IP
Adressen "konfiguriert" sind (z.B. für eine lokale Netzwerkkarte und
durch einen Internet-Provider) muss der JDK Parameter:
-Djava.rmi.server.hostname=
verwendet werden. Der Parameter muss in der »StartServer.bat«
angegeben werden.
Beispiel:
Für seine Netzwerkkarte hat man sich eine private IP-Adresse
reserviert, z.B. 192.168.0.99. Durch den Internet Provider hat man beim
"Einwählen" dieIP-Adresse 80.131.4.117 erhalten. Der Chat-Server soll
anderen Benutzern im Internet zur Verfügung gestellt werden. Es muss
der Parameter
-Djava.rmi.server.hostname=80.131.4.117
in dem Batch-File »StartServer.bat« zus„tzlich angegeben
werden. Das Batch-File sieht dann so aus:
set JDK=D:\Programme\Java\JDK1.3\jre
set classpath=%JDK%/lib/rt.jar;.;chat-classes13.zip;
%JDK%/bin/java -Djava.rmi.server.hostname=80.131.4.117 de.y.chat.server.ServerMain
Nachdem man die oben genannten Eintragungen im der »Server.ini«
vorgenommen hat, die Anpassungen im java-Policy File durchgeführt und
die »StartServer.bat« an das eigene JRE angepasst hat, kann
man den Server starten.
Möchte man aber testen, ob der Server ordnungsgemäß
gestartet ist sollte daher die »Server.ini« nochmals
vorübergehend geändert werden. Die Zeilen
log.server.console=
log.server.file=
log.server.level=
sollten folgende Eintragungen erhalten:
log.server.console=true
log.server.file=/log/server.log
log.server.level=0
Dies führt dazu, dass der Server alle Ausgaben in die Konsole
und in das Server Logfile schreibt.
Startet der Server ordnungsgemäß erscheint eine
Ausgabe in der Konsole, die in etwa so aussieht:
Tatsächliches Logfile ist=D:/void-chat/log/server.log
Binding the server...
Done.
Server installed.
Location Data:
** Protocol: TCP
** Host: 127.0.0.1
** Port: 1285
Konnte der Server nicht gestartet werden kommt entweder
java.security.AccessControlException
,
ist dies ein Indiz dafür, daß die Eintragung im
java-Policy File nicht richtig ist. Die Eintragungen sollten dann
nochmals geprüft werden.
3.1. Client-Konfigurationsfile anpassen
Folgende Einträge in der »Client.ini« müssen1) ausgefüllt sein:
1) mit der Version 1.0.2 sind in dem Konfigurationsfile default-Eintragungen vorhanden, damit für einen »schnellen« Start diese Eintragungen/Anpassungen nicht vorgenommen werden müssen. Nichtsdestotrotz sollten die Daten für einen »eigenen« Client angepasst werden.
[CLIENT] | ||
name | der Nickname des Benutzers | X1) |
die e-Mailadresse des Benutzers | X | |
realname | der wirkliche Name des Benutzers | |
firststartup | true, wenn der Client zum ersten Mal gestartet wird, ansonsten false | |
join.channel[0...n] | Der Name eines Channels, der automatisch betreten werden soll. Es
können beliebig viele Einträge in der INI enthalten sein.
Je Eintrag darf immer nur ein Channelname angegeben werden.
Für eine eindeutige Identifizierung sollte dem Channelname der
Präfix # vorangestellt werden.
Beispiel: |
|
[SERVER] | ||
server.protocol | Definiert das Netzwerkprotokoll. Ist kein Wert eingetragen, wird
TCP genutzt. Mögliche Eintragungen sind RMI oder TCP. Das Protocoll RMI kann fü das Internet nicht genutzt werden |
|
server.host | Definiert die IP-Adresse des Chat-Servers | X |
server.port | Definiert den Port, auf dem die Kommunikation mit dem Server
erfolgen soll. Standardeintragung ist 1285 |
|
server.bind | Definiert den »Bind«-Namen. Unter diesem Namen wurde
der Chat-Server auf dem Host-Rechner in der RMIRegistry
registriert. Nach der Herstellung der Verbindung zwischen Client und Host, sucht der Client in der RMIRegistry des Hostrechners nach dem Chat-Server unter Berücksichtigung der »server.bind« Eintragung. Dieser Standardname sollte daher nicht geändert werden |
|
[LOGGING] | ||
log.client.console | true, wenn Ausgaben in die Konsole geloggt werden sollen, ansonsten false | |
log.client.file | der Name des Files, in die die Ausgaben des Clients geloggt werden
sollen. Mögliche Werte sind:
Beispiele: |
|
log.client.level | definiert den Loglevel (0-10)2) | |
[COMMANDS+HELP] | ||
typ | Definiert den Command Typ. Die Eintragung ist in dieser Version
ohne Bedeutung. Grundsätzlich sind im Client 2
unterschiedliche Befehlssätze implementiert: IRC und MSG. Der IRC Befehlssatz enthält Befehle, die eng an die im IRC gebräuchlichen Befehle angelehnt sind. Der MSG Befehlssatz ist eine Eigenentwicklung.
|
|
template | Definiert das Template File für die Commmands | |
parser.class | Definiert das zu benutzenden Befehlsparser class-file (de.y.chat.client.ParserIRC oder de.y.chat.client.HelpMSG_de) | |
[USER_INTERFACE] | ||
font.name | der Name des Zeichensatzes | |
font.size | die Größe des Zeichensatzes |
1) die mit X gekennzeichnteten
Einträge müssen angepasst werden
2) über den Loglevel können
Systemausgaben gesteuert werden. Der Loglevel 10 bewirkt, dass die
Anwendung keine Ausgaben erzeugt. Bei Loglevel 0 werden alle relevanten
Daten ausgegeben. Für die Fehlersuche sollte daher der Level 0
eingestellt werden
Im zip-File »void-chat.zip« ist das Batch-File
»StartClient.bat« enthalten, daß an die Installation
der Java Runtime Umgebung (Java Runtime Environment = JRE) angepasst werden
muss:
Hier muss die Zeile
set JDK=D:\Programme\Java\JDK1.3\jre
set classpath=%JDK%/lib/rt.jar;.;chat-classes13.zip;
%JDK%/bin/java de.y.chat.server.ServerMain
an die Installation der JRE auf dem Rechner angepasst werden.
set JDK=
Beispiel:
Hat man die JRE unter
D:\Programme installiert, so befindet sich dort folgende
Ordner-Strukur:
D:\Programme\JRE
oder
D:\Programme\JDK\JRE
(wenn man das Java Development Kit installiert hat).
Die Eintragung in der »StartClient.bat« muss dann
folgendermaßen angepasst werden:
set JDK=D:\Programme\JRE
(oder set JDK=D:\Programme\JDK\JRE)
Innerhalb des Batch-File »StartClient.bat« kann dem zu
startenden Java-Programm ein spezielles Konfigurationsfile übergeben
werden:
/ini=Name des Ini-Files (zur Übergabe eines speziellen
»Client.ini« Files)
Beispiel:
%JDK%/bin/java de.y.chat.client.ClientMain /ini=myClient.ini
Chat was programmed by: Thomas (VoiD) Keitel in 2002 (c)
Version: 1.0.1
E-Mail: VoiD
Fehler und Fehlermeldungen, Bugs und sonstige Anregungen bitte an
Found a Bug
senden.
Der Chat ist für den privaten Bereich hiermit ausdrücklich
freigegeben. Für eine kommerzielle/betriebliche Nutzung ist das
Einverständnis einzuholen. Eine entsprechende Anfrage ist an
VoiD
zu richten.
Interessierte Entwickler k”nnen den Quellcode gerne bei mir anfordern.
Special thanks to:
Gerne bin ich bereit bei dem einen oder anderen Problem auszuhelfen. Dies gilt aber nur dann, wenn es sich um ein Problem handelt, dass nicht unter Zuhilfenahme dieses README-Files gelöst werden kann. Bei Problemen, die aufgrund unzureichender Kenntnisnahme dieses Dokuments auftreten werde ich nicht weiterhelfen.
Have fun :)