Tak więc teraz robię wielowątkowy oparty na aplikacji klienckiej. Po stronie serwera tworzę wątek dla każdego zaakceptowanego połączenia.Wysyłanie wiadomości do wszystkich klientów (klient - komunikacja z serwerem)
W klasie wątków wykonuję metodę, która wysyła polecenie do klienta. Czego chcę tylko, to, jak wysłać parametr do wszystkich działających klientów? Dla prostych instrukcji, chcę tylko sprawić, aby serwer wysyłał wiadomości do wszystkich podłączonych klientów.
Przeczytałem this post i odnaleziono metodę sendToAll(String message)
od . Ale kiedy próbuję w moim kodzie, nie ma takiej metody w ServerSocket
.
OK, to jest mój przykładowy kod dla serwera i wątku.
class ServerOne{
ServerSocket server = null;
...
ServerOne(int port){
System.out.println("Starting server on port "+port);
try{
server = new ServerSocket(port);
System.out.println("Server started successfully and now waiting for client");
} catch (IOException e) {
System.out.println("Could not listen on port "+port);
System.exit(-1);
}
}
public void listenSocket(){
while(true){
ClientWorker w;
try{
w = new ClientWorker(server.accept());
Thread t = new Thread(w);
t.start();
} catch (IOException e) {
System.out.println("Accept failed: 4444");
System.exit(-1);
}
}
}
protected void finalize(){
try{
server.close();
} catch (IOException e) {
System.out.println("Could not close socket");
System.exit(-1);
}
}
}
class ClientWorker implements Runnable{
Socket client;
ClientWorker(Socket client){
this.client = client;
}
public void run(){
...
sendCommand(parameter);
...
}
public void sendCommand(String command){
PrintWriter out = null;
try {
out = new PrintWriter(client.getOutputStream(), true);
out.println(command);
} catch (IOException ex) {}
}
}
Dzięki za pomoc :)
Twoja odpowiedź brzmi świetnie, ale brakuje Ci kilku dwukropek i należy zmienić 'messages.dequeue();' i 'messages.enqueue();' na 'messages.take();' i ' messages.put(); ' – Danon
Czy jesteś pewien, że ta klasa jest bezpieczna dla wątków? Mam na myśli, co jeśli wzywam sendToOne()/sendToAll w czasie akceptować/wątki zmiany clientList? – Danon
@Danon Zobacz edycję. – Mordechai