Server spricht nicht jeden Clientsan

Status
Nicht offen für weitere Antworten.

A-n-d-y

Mitglied
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.
Code:
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]
 
> 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
 
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
 
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
 
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?
 
warum auch in eine JList rein? das ist eine hochkomplexe GUI-Komponente,

ich meinte eine einfache ArrayList, nur zur Verwaltung der Objekte
 
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 ...!?
 
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
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben