# Teilnehmerliste vom Server auch an alle Clients senden



## memo1990 (28. Mrz 2014)

Hallo zusammen,

schreibe gerade ein Chat-Programm. Soweit läuft alles. Nur ich schaffe es nicht die Teilnehmerliste, eine Liste mit den angemeldeten Benutzernamen vom Server, an alle Clients zu senden, damit man sieht wer online ist.

Die Liste ist ein eine ganz normale _*DefaultListModel<String>*_. Wenn sich einer anmeldet und abmeldet funktioniert es wunderbar. Aber wie bekomme ich die Liste an die Clients? Versuche es schon seit 2 Tagen. Im Internet habe ich auch nichts gefunden.

ClientThread-Klasse vom Server:


Spoiler





```
package main;

import java.io.*;
import java.net.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import gui.*;

public class ClientThread implements Runnable {
	private Socket client;
	private MainGUI serverGui;
	private BufferedReader in;
	private BufferedWriter out;
	private String username;
	private String msg;
	
	public ClientThread(Socket c, MainGUI f) {
		client = c;
		serverGui = f;
	}
	
	@Override
	public void run() {
		try {
			in = new BufferedReader(new InputStreamReader(client.getInputStream()));
			out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
			
			username = in.readLine(); // Empfange vom Client als erstes den Benutzernamen
			MainGUI.listModel.addElement(username); // Füge Benutzername in die Teilnehmerliste hinzu
			
			serverGui.setMsg("[INFO] " + new SimpleDateFormat("HH:mm").format(new Date()) + " - " + username + " hat sich angemeldet!");
			
			while (true) {
				msg = in.readLine(); // Wartet bis eine Nachricht vom Client geschickt wird
				serverGui.setMsg(msg); // Empfangene Nachricht in das Chatfenster vom Server schreiben
				
				// Empfangene Nachricht an alle anderen Clients senden
				for (int i = 0; i < Server.clientList.size(); i++) {
					if (client != Server.clientList.get(i)) {
						Socket s = Server.clientList.get(i);
						BufferedWriter listWriter = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
						listWriter.write(msg + "\n");
						listWriter.flush(); // Damit die Nachricht, die voerst im Puffer liegt, gleich übergeben wird
					}
				}
			}
		} catch (IOException e) {
			serverGui.setMsg("[INFO] " + new SimpleDateFormat("HH:mm").format(new Date()) + " - " + username + " hat sich abgemeldet!");
			
			// Client von der Teilnehmerliste entfernen
			for (int i = 0; i < MainGUI.listModel.getSize(); i++) {
				if (MainGUI.listModel.getElementAt(i).equals(username)) {
					MainGUI.listModel.remove(i);
					Server.clientListCounter--;
				}
			}
		}
	}
}
```




Client-Klasse vom Client:


Spoiler





```
package main;

import java.io.*;
import java.net.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import gui.*;

public class Client implements Runnable {
	private String host;
	private int port;
	private Socket client;
	private BufferedReader in;
	private BufferedWriter out;
	private MainGUI clientGui;
	
	public Client(String h, int p, MainGUI f) {
		host = h;
		port = p;
		clientGui = f;
	}
	
	@Override
	public void run() {
		try {
			client = new Socket(host, port);
			
			clientGui.addClientOutputStream(client.getOutputStream()); // OutputStream an das Hauptfenster übergeben
			in = new BufferedReader(new InputStreamReader(client.getInputStream())); // Baue InputStream auf
			out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream())); // Baue OutputStream auf
			
			clientGui.readMsg("[INFO] " + new SimpleDateFormat("HH:mm").format(new Date()) + " - Erfolgreich mit Server verbunden!");
			
			out.write(clientGui.getUsername() + "\n"); // Übermittle als erstes den Benutzernamen
			out.flush();
			
			while (true) {
				clientGui.readMsg(in.readLine()); // Wartet bis eine Nachricht vom Server empfangen wird und schreibt es in das Chatfenster vom Client
			}
		} catch (UnknownHostException e) {
			clientGui.readMsg("[INFO] " + new SimpleDateFormat("HH:mm").format(new Date()) + " - Server konnte nicht gefunden werden!");
		} catch (IOException e) {
			clientGui.readMsg("[INFO] " + new SimpleDateFormat("HH:mm").format(new Date()) + " - Kommunikationsfehler!");
		}
	}
}
```


----------

