Kaffee & Kuchen
Kaffee & Kuchen
die führende deutsche
Java-Seite
von Christoph Bergmann
und Hannes Gamperl



Java-Chat selbst gemacht
Der Chat-Server

Suche

Erweiterte Suche

Kommunikation
Chat
Forum

Java-Neuigkeiten

Einführung
Was ist Java?
Wie fange ich an?
Bücher über Java

Workshops
Animacons für jeden
Chat selbst gemacht
Sicherheit, URLs & Streams
Sockets, Client/Server & das Chat-System

Der Chat-Server
Die Connection-Klasse
Das Chat-Applet

Kompilieren & Starten
Der komplette Quellcode
JDBC

Wissen
Entwicklungssysteme

Ressourcen
Applet-Bibliothek
Deutsche Java-Links
Internat. Java-Links
Glossar
News-Archiv

K&K Intern
Pressespiegel
Auszeichnungen
Werbung auf K&K

Weitere Angebote
Milch&Zucker: DHTML
K.&Kekse: Javascript
mac.seite: Apple

Fragen, Lob & Kritik
bitte in das Forum

EMail an java@acc.de
nur, wenn es nichts Allgemeines ist.

Kaffee & Kuchen
ist ein Service von
ACCESS Internet

    Zuerst müssen wir die benötigten Standardklassenpakete importieren:
    import java.net.*;
    import java.io.*;
    import java.util.*;
    
    In java.net befinden sich die zur Internet-Kommunikation benötigten Klassen, wie Socket oder URL. Das Standardpaket java.io beherbergt die zur Ein-/Ausgabe nötigen Klassen, hauptsächlich Streams, und java.util eine Reihe nützlicher "Werkzeuge", z.B. die von uns benötigte Klasse zur Verwaltung von Listen.
    public class chatserver implements Runnable
    {
    	...
    }
    
    Unsere Chat-Server-Klasse soll als eigenständiger Thread laufen und implementiert deshalb die Runnable-Schnittstelle.
    public static final int PORT = 8765;
    protected ServerSocket listen;
    protected Vector connections;
    Thread connect;
    
    Nachdem wir die Klasse definiert haben, folgen die Variablendefinitionen. PORT ist eine willkürlich festgelegte Konstante, ServerSocket brauchen wir um auf dem Server den Socket zum "Lauschen" nach Verbindungen einzurichten. Der "Vektor" connections ist einfach eine Liste, in der wir die Verbindungen verwalten und connect schliesslich speichert den Thread der Chat-Server-Klasse.
    public static void main(String[] args)
    {
    	new chatserver();
    }
    
    Die Einstiegsmethode erzeugt einfach eine Instanz unserer Klasse, deren Konstruktor ausgeführt wird.
    public chatserver()
    {
    	try
    	{
    		listen = new ServerSocket(PORT);
    	} catch (IOException e)
    	{
    		System.err.println("Fehler beim Erzeugen der Sockets:"+e);
    		System.exit(1);
    	}
    
    	connections = new Vector();
    
    	connect = new Thread(this);
    	connect.start();
    }
    
    Der Konstruktor öffnet einen Socket unter dem angegebenen Port und fängt mögliche Fehler ab. Dann erzeugt er die Liste, die die Verbindungen verwaltet und sich selbst als neuen Thread und startet ihn.
    public void run()
    {
    	try
    	{
    		while(true)
    		{
    			Socket client=listen.accept();
    
    			connection c = new connection(this, client);
    			connections.addElement(c);
    		}
    	} catch (IOException e)
    	{
    		System.err.println("Fehler beim Warten auf Verbindungen:"+e);
    		System.exit(1);
    	}
    }
    
    Der Laufteil des Programms befindet sich in einer Endlosschleife - ununterbrochen wartet der Server auf mögliche Verbindungsanfragen. Geht eine ein, erzeugt er für diese Verbindung ein neues connection-Objekt, das als eigenständiger Thread implementiert ist und die Behandlung dieser einen Verbindung übernimmt. Diese "Übergabe" ist deshalb notwendig, damit der Server danach wieder auf neue Verbindungsanfragen lauschen kann.
    public void broadcast(String msg)
    {
    	int i;
    	connection you;
    
    	for (i=0; i<connections.size(); i++)
    	{
    		you = (connection) connections.elementAt(i);
    		you.out.println(msg);
    	}
    }
    
    Die broadcast-Methode durchläuft alle offenen Verbindungen und übermittelt diesen die übergebene Nachricht msg. Da nur die chatserver-Klasse über alle Verbindungen auf dem laufenden ist, muss sie auch als Bestandteil der chatserver-Klasse implementiert sein - obwohl sie von dieser garnicht benötigt wird, sondern von der nachfolgenden connection-Klasse.



Sockets, Client/Server & das Chat-System Die Connection-Klasse
Nach oben

© 1998 Christoph Bergmann / ACCESS Internet. Alle Rechte vorbehalten.