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



Java-Chat selbst gemacht
Der komplette Quellcode

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

    Vergessen Sie nicht, die einzelnen Klassen auch in eigenen Dateien mit entsprechenden Namen zu speichern, also die chatserver-Klasse in der Datei "chatserver.java", die connection-Klasse in der Datei "connection.java" und die chatapplet-Klasse in der Datei "chatapplet.java".
    import java.net.*;
    import java.io.*;
    import java.util.*;
    
    public class chatserver implements Runnable
    {
    	public static final int PORT = 8765;
    	protected ServerSocket listen;
    	protected Vector connections;
    	Thread connect;
    
    	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();
    	}
    
    	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);
    		}
    	}
    
    	public static void main(String[] args)
    	{
    		new chatserver();
    	}
    
    	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);
    		}
    	}
    }
    
    
    import java.net.*;
    import java.io.*;
    
    class connection extends Thread
    {
    	protected Socket client;
    	protected DataInputStream in;
    	protected PrintStream out;
    	protected chatserver server;
    
    	public connection(chatserver server, Socket client)
    	{
    		this.server=server;
    		this.client=client;
    
    		try
    		{
    			in = new DataInputStream(client.getInputStream());
    			out = new PrintStream(client.getOutputStream());
    		} catch (IOException e)
    		{
    			try { client.close(); } catch (IOException e2) {} ;
    			System.err.println("Fehler beim Erzeugen der Streams: " + e);
    			return;
    		}
    
    		this.start();
    	}
    
    
    	public void run()
    	{
    		String line;
    
    		try
    		{
    			while(true)
    			{
    				line=in.readLine();
    				if(line!=null)
    					server.broadcast(line);
    			}
    		} catch (IOException e)
    		{
    			System.out.println("Fehler:" + e);
    		}
    	}
    }
    
    
    
    import java.net.*;
    import java.io.*;
    import java.awt.*;
    import java.applet.*;
    
    public class chatapplet extends Applet implements Runnable
    {
    	public static final int PORT = 8765;
    	Socket socket;
    	DataInputStream in;
    	PrintStream out;
    	TextField inputfield;
    	TextArea outputarea;
    	Thread thread;
    
    	public void init()
    	{
    		inputfield = new TextField();
    		outputarea = new TextArea();
    		outputarea.setFont( new Font("Dialog", Font.PLAIN, 12));
    		outputarea.setEditable(false);
    
    		this.setLayout(new BorderLayout());
    		this.add("South", inputfield);
    		this.add("Center", outputarea);
    
    		this.setBackground(Color.lightGray);
    		this.setForeground(Color.black);
    		inputfield.setBackground(Color.white);
    		outputarea.setBackground(Color.white);
    	}
    
    	public void start()
    	{
    		try
    		{
    			socket = new Socket(this.getCodeBase().getHost(), PORT);
    			in = new DataInputStream(socket.getInputStream());
    			out = new PrintStream(socket.getOutputStream());
    		} catch (IOException e)
    		{
    			this.showStatus(e.toString());
    			say("Verbindung zum Server fehlgeschlagen!");
    			System.exit(1);
    		}
    
    		say("Verbindung zum Server aufgenommen...");
    
    		if (thread == null)
    		{
    			thread = new Thread(this);
    			thread.setPriority(Thread.MIN_PRIORITY);
    			thread.start();
    		}
    	}
    
    
    	public void stop()
    	{
    		try
    		{
    			socket.close();
    		} catch (IOException e)
    		{
    			this.showStatus(e.toString());
    		}
    
    		if ((thread !=null) && thread.isAlive())
    		{
    			thread.stop();
    			thread = null;
    		}
    	}
    
    
    	public void run()
    	{
    		String line;
    
    		try
    		{
    			while(true)
    			{
    				line = in.readLine();
    				if(line!=null)
    					outputarea.appendText(line+'\n' );
    			}
    		} catch (IOException e) { say("Verbindung zum Server abgebrochen"); }
    	}
    
    
    	public boolean action(Event e, Object what)
    	{
    		if (e.target==inputfield)
    		{
    			String inp=(String) e.arg;
    
    			out.println(inp);
    			inputfield.setText("");
    			return true;
    		}
    
    		return false;
    	}
    
    
    	public void say(String msg)
    	{
    		outputarea.appendText("*** "+msg+" ***\n");
    	}
    }
    
    Diesen Quellcode gibt es auch als reine Textdatei.



Kompilieren & Starten
Nach oben

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