Hey,
ich habe einen einfachen Chat-Server erstellt. Jeder Client bekommt einen neuen Thread und wird in einer ArrayList eingetragen. Nun möchte ich eine Nachricht an alle Client senden lassen. Jedoch sendet der Server nur die selbe Nachricht so oft wie viele Clients verbunden sind zu den letzten Client, der sich zum Server verbunden hat.
Vielen Dank schon mal.
mistercoll
ich habe einen einfachen Chat-Server erstellt. Jeder Client bekommt einen neuen Thread und wird in einer ArrayList eingetragen. Nun möchte ich eine Nachricht an alle Client senden lassen. Jedoch sendet der Server nur die selbe Nachricht so oft wie viele Clients verbunden sind zu den letzten Client, der sich zum Server verbunden hat.
Java:
package main;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Scanner;
import UI.Frame;
public class Server {
static ServerSocket ss = null;
static Socket s = null;
static Scanner in = null;
static Thread t;
static ArrayList<ClientThread> al = new ArrayList<ClientThread>();
static Frame frm;
public static void main(String[] args) {
frm = new Frame();
try {
ss = new ServerSocket(1010);
} catch (IOException e) {
e.printStackTrace();
}
frm.write("[Server] Server gestartet");
frm.write("[Server] Warte auf Clients ...");
while(!ss.isClosed()) {
try {
s = ss.accept();
ClientThread chat = new ClientThread(s);
al.add(chat);
chat.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void send(String os) {
frm.write(os);
for(ClientThread ct : al) {
ct.writemsg(os);
}
}
public static void close() {
if(al.size() != 0) send("exit");
System.exit(0);
}
}
Java:
package main;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class ClientThread extends Thread {
static Socket s;
String n;
Scanner in;
static PrintWriter out;
public ClientThread(Socket so) {
s = so;
}
public void writemsg(String s) {
out.println(s);
out.flush();
}
@Override
public void run() {
try {
in = new Scanner(s.getInputStream());
out = new PrintWriter(s.getOutputStream());
while(true) {
if(in.hasNext()) {
n = in.nextLine();
System.out.println(n);
if(n.contains("exit")) {
s.close();
String name = n.replaceAll("exit", "");
Server.al.remove(this);
Server.send(name + "Server verlassen");
} else if(n.contains("ping")) {
this.writemsg("pong");
} else Server.send(n);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Vielen Dank schon mal.
mistercoll