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:
Client-Klasse vom Client:
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:
Java:
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:
Java:
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!");
}
}
}
Zuletzt bearbeitet: