Hallo zusammen,
ich versuche mich gerade an einem Chatserver in Java und komme leider überhaupt nicht weiter. Der Server läuft über die ServerSocket-Klasse und soll, wie es sich für einen Chat gehört, natürlich mehrere Clients gleichzeitig bedienen. Also versuche ich das mit Threads zu lösen.
Was ich bisher habe:
Als Client verwende ich Flash, was so eigentlich auch ganz gut funktioniert.
Mein Problem ist, das mit diesem Script bisher zwar beliebig viele Clients auf dem Server einloggen können, aber der Server eher als Echo-Server fungiert, da er jedem Client nur das gesendete wieder zurücksendet und eben auch nur dem der gesendet hat...nicht gerade sehr sinnvoll
Ich wollte nun die Sockets in einem array speichern und dann nacheinander jedem Clienten die eingehenden Messages senden, aber irgendwie klappt das nicht. Sobald ich irgendwie die im try-block der run()-Methode etwas verändere, kann ich weder senden noch empfangen.
Ich möchte jetzt eigentlich nur, das der Client identifiziert wird (er sendet beim Verbindungsaufbau eine Kennung - seinen Usernamen) und das er in einer Liste gespeichert wird, damit ich dann eine Art Clientpool verwalten kann...Ich hab es auch schon mit der Vector-Klasse probiert...ohne grossen Erfolg.
Ich muss dazu sagen, das ich noch nicht allzu bewandert bin was Java betrifft und daher meine Schwierigkeiten habe.
Ich wäre dankbar, wenn mir mal jemand etwas auf die Sprünge helfen könnte...ich habe schon so ziemlich das ganze Wochenende damit verbracht, aber bin immer nur mit Fehlern belohnt worden...
Gruß
ich versuche mich gerade an einem Chatserver in Java und komme leider überhaupt nicht weiter. Der Server läuft über die ServerSocket-Klasse und soll, wie es sich für einen Chat gehört, natürlich mehrere Clients gleichzeitig bedienen. Also versuche ich das mit Threads zu lösen.
Was ich bisher habe:
Code:
/* Chatserver java */ import java.net.*; import java.io.*; public class ChatServer // Anfang Attribute // Ende Attribute { // Anfang Methoden public static void main(String[] args) { int cnt = 0; try { System.out.println("Warte auf Verbindungen auf Port 4000..."); ServerSocket echod = new ServerSocket(4000); while (true) { Socket socket = echod.accept(); (new ChatClientThread(++cnt, socket)).start(); } } catch (IOException e) { System.err.println(e.toString()); System.exit(1); } } // Ende Methoden } class ChatClientThread extends Thread { // Anfang Attribute1 private int verbindungsnummer; private Socket socket; // Ende Attribute1 public ChatClientThread(int verbindungsnummer, Socket socket) { this.verbindungsnummer = verbindungsnummer; this.socket = socket; } // Anfang Methoden1 public void run() { String msg = "Chatserver: Verbindung hergestellt"; System.out.println(msg); try { InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); out.write((msg + "\r\n").getBytes()); int c; while ((c = in.read()) != -1) { out.write((char)c); System.out.print((char)c); } System.out.println("Verbindung " + verbindungsnummer + " wird beendet"); socket.close(); } catch (IOException e) { System.err.println(e.toString()); } } // Ende Methoden1 }
Mein Problem ist, das mit diesem Script bisher zwar beliebig viele Clients auf dem Server einloggen können, aber der Server eher als Echo-Server fungiert, da er jedem Client nur das gesendete wieder zurücksendet und eben auch nur dem der gesendet hat...nicht gerade sehr sinnvoll
Ich wollte nun die Sockets in einem array speichern und dann nacheinander jedem Clienten die eingehenden Messages senden, aber irgendwie klappt das nicht. Sobald ich irgendwie die im try-block der run()-Methode etwas verändere, kann ich weder senden noch empfangen.
Ich möchte jetzt eigentlich nur, das der Client identifiziert wird (er sendet beim Verbindungsaufbau eine Kennung - seinen Usernamen) und das er in einer Liste gespeichert wird, damit ich dann eine Art Clientpool verwalten kann...Ich hab es auch schon mit der Vector-Klasse probiert...ohne grossen Erfolg.
Ich muss dazu sagen, das ich noch nicht allzu bewandert bin was Java betrifft und daher meine Schwierigkeiten habe.
Ich wäre dankbar, wenn mir mal jemand etwas auf die Sprünge helfen könnte...ich habe schon so ziemlich das ganze Wochenende damit verbracht, aber bin immer nur mit Fehlern belohnt worden...
Gruß
Kommentar