mehmet_b_90
Lieutenant Pro
- Registriert
- Aug. 2013
- Beiträge
- 618
Guten Abend liebe CB-Community,
programmiere gerade ein Chat-Programm. Läuft auch soweit wunderbar. Allerdings habe ich da eine eher allgemeine Frage zu diesem Thema.
Wie reagiere ich außer auf Textnachrichten in einer Schleife solcher Client-Server-Modelle? Ich habe ja eine Schleife mit einer read-Methode die immer wartet bis Daten von der andere Seite ankommen und werden dann als Character/String weiter verarbeitet.
Wie reagiere ich aber, wenn die andere Stelle mal binäre Daten oder Objekte verschickt? Ich muss ja vorher überprüfen ob es sich um Text oder Binär handelt.
Hier zwei Abschnitte meiner Codes:
ClientThread-Klasse vom Server:
Client-Klasse vom Client:
programmiere gerade ein Chat-Programm. Läuft auch soweit wunderbar. Allerdings habe ich da eine eher allgemeine Frage zu diesem Thema.
Wie reagiere ich außer auf Textnachrichten in einer Schleife solcher Client-Server-Modelle? Ich habe ja eine Schleife mit einer read-Methode die immer wartet bis Daten von der andere Seite ankommen und werden dann als Character/String weiter verarbeitet.
Wie reagiere ich aber, wenn die andere Stelle mal binäre Daten oder Objekte verschickt? Ich muss ja vorher überprüfen ob es sich um Text oder Binär handelt.
Hier zwei Abschnitte meiner Codes:
ClientThread-Klasse vom Server:
Code:
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:
Code:
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: