G
Guest
Gast
Hallo,
folgendes: ich hab' nen kleinen Chat-Server geschrieben, welcher für eingehende Verbindung einen neuen Thread für den Empfang und das Versenden von Daten erzeugt.
Der Server hat einen statischen Vector 'clients', in welchen beim Zustandekommen der Verbindung der erzeugte Thread abgespeichert wird. Beim Versenden von Daten wird dann der Vector durchlaufen und sendet dabei die Nachricht an alle Client-Threads.
Mein Problem: wenn ich mit einer Testklasse den Vector auf seine Grösse überprüfe, ergibt das immer 0, egal wieviele Clients verbunden sind, und trotzdem funktioniert das broadcasten!
Habe keine Ahnung wo mein Fehler liegt, vielleicht könnt ihr mir weiterhelfen
folgendes: ich hab' nen kleinen Chat-Server geschrieben, welcher für eingehende Verbindung einen neuen Thread für den Empfang und das Versenden von Daten erzeugt.
Der Server hat einen statischen Vector 'clients', in welchen beim Zustandekommen der Verbindung der erzeugte Thread abgespeichert wird. Beim Versenden von Daten wird dann der Vector durchlaufen und sendet dabei die Nachricht an alle Client-Threads.
Mein Problem: wenn ich mit einer Testklasse den Vector auf seine Grösse überprüfe, ergibt das immer 0, egal wieviele Clients verbunden sind, und trotzdem funktioniert das broadcasten!
Habe keine Ahnung wo mein Fehler liegt, vielleicht könnt ihr mir weiterhelfen
Code:
import java.net.*;
import java.io.*;
import java.util.Vector;
/**
* Die Klasse verwaltet eingehende Verbindungsanforderungen der Clients und öffnet
* beim Zustandekommen einer Verbindung den zugehörigen Socket, welcher an den
* neu erzeugten ClientConnection-Thread übergeben wird.
*/
public class Server {
private ServerSocket sSocket;
private Socket socket;
private ServerLog log;
private static Vector clients = new Vector();
private static Vector usernames = new Vector();
/**
* Erzeugt eine neue Instanz von Server. Dabei wird ein ServerSocket auf
* Port 6666 geöffnet und der Vector 'clients' deklariert.
*/
public Server() {
try {
sSocket = new ServerSocket(6666);
} catch (IOException e) {
log.write(e.toString());
System.exit(1);
}
}
/**
* In einer Endlosschleife wird auf jeder eingehenden Verbindung ein Socket
* erzeugt, welcher an den Konstruktor des ClientConnection-Threads übergeben
* wird. Die einzelnen Threads werden im Vector 'clients' abgelegt.
*/
public void waiting() {
while (true) {
try {
socket = sSocket.accept();
System.out.println("Verbunden");
ServerConnection sConn = new ServerConnection(socket);
sConn.start();
clients.addElement(sConn);
} catch (IOException e) {
log.write(e.toString());
}
}
}
/**
* Versendet die eingehende Nachricht an alle Clients im Vector 'clients'.
* @param input Die zu weiterleitende Nachricht des Clients
*/
public static void broadcast(String input) {
for (int i = 0; i < clients.size(); i++) {
((ServerConnection)clients.elementAt(i)).send(input);
}
}
/**
* Erzeugt Instanz von Server und startet die waiting()-Methode.
* @param args Kommandozeilen-Eingabe
*/
public static void main(String args[]) {
Server server = new Server();
server.waiting();
}
}