# Server spricht nicht jeden Clientsan



## A-n-d-y (9. Jan 2008)

Hi ihr,
ich bin derzeit dabei bzw muss ein Java Chat zu implementieren. Das funktioniert auch bis jetzt aber ich bekomme  es nicht hin dass der Server die Nachrichten an ale Clients rausschickt. Clients werden bei mir über Threads angenommen.

```
public void run (){
		BufferedReader in = null;
		PrintWriter out = null;
		
	try{
		System.out.println("Clientverbindung herstellen");
		in = new BufferedReader ( new InputStreamReader(clientSocket.getInputStream()));
		out = new PrintWriter (clientSocket.getOutputStream(),true);
		String s;
		while ((s = in.readLine())!=null){
			System.out.println("Empfangen: "+ s );
			out.println(s);			
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
	finally{
		try{
			System.err.println("Verbindung beendet");
			out.close();
			in.close();
			clientSocket.close();
		}catch (Exception e){
			e.printStackTrace();
		}
	}
	}
```

ich habs jetzt schon über verschiedene wege wie Array mit den PrintWritern aber das alles fühte nicht sonderlich zu erfolg
habt ihr einen Tip für mich?[/code]


----------



## SlaterB (9. Jan 2008)

> System.out.println("Empfangen: "+ s ); 
>  out.println(s);          

da muss hin:

System.out.println("Empfangen: "+ s ); 
for (alle aktuellen Cliens) {
ausgabe s;
}


die Clients kannst du irgendwo in einer Liste sortieren oder was auch immer,
alles denkbar, schwer da etwas allgemein vorzugeben


----------



## A-n-d-y (9. Jan 2008)

und genau da liegt das Problem. wie bekomm ich da alles Clients!? Hat jemand erfahrung vielleicht mit einem ThreadPool oder ThreadGroup wobei ich keine ahnung hab wies funktioniert


----------



## SlaterB (9. Jan 2008)

irgendwo hast du doch einen Haupt-Server-Thread, der Clients annimmt,

kommt ein Client -> neuer Client-Thread

an dieser Stelle nimmst du das Client-Thread-Objekt und packst es in eine Liste aller Threads, die du z.B. im Haupt-Server-Thread als Exemplarvariable ablegst,
außerdem bekommt jeder Client-Thread noch diese Liste oder besser den Haupt-Server-Thread selber als Parameter im Konstruktor übergeben,
so kannst du später von überall auf diese Liste zugreifen


----------



## Guest (10. Jan 2008)

hmm...o.k anscheind anfängerproblem aber wie bekomm ichs hin das er einen Thread z.B. in einer JList speichert?  sobald ich den .add befehl aufruf mekert er dass das nich ein thread kein Component wäre ..und casten wird da wohl nicht gehen odeR?


----------



## SlaterB (10. Jan 2008)

warum auch in eine JList rein? das ist eine hochkomplexe GUI-Komponente,

ich meinte eine einfache ArrayList, nur zur Verwaltung der Objekte


----------



## A-n-d-y (10. Jan 2008)

das problem ist dass sobald ein Thread sich beendet dass du ja nicht weißt welcher das in der ArrayList ist ... d.h. die wird ja irgendwann mal rießig ...!?


----------



## SlaterB (10. Jan 2008)

ein Thread-Objekt ist was ganz anderes als ein Thread selber

du kannst jederzeit die Liste durchlaufen und feststellen, ob die enthaltenen Threads nicht mehr laufen (und dann rausschmeißen),
oder ein beendeter Thread entfernt sich selber aus der Liste,
oder oder,
alle Möglichkeiten offen


----------

