Olá, estou com um sistema Cliente-Servidor que recebe conexões de vários clientes, e também recebe mensagens desses clientes,estou com muitas dúvidas em como fazer com que o meu Servidor envie uma mensagem para todos os clientes conectados.
Segue minha classe Servidor:
public class Servidor extends Thread {
private Socket conexao;//esse é o meu cliente
public Servidor(Socket s) {//recebe o valor do socket enviado na thread
conexao = s;
}
public static void main(String[] args) throws Exception {
ServerSocket s = null;//cria um servidor chamado s
try {
System.out.println("Iniciando Servidor...");
s = new ServerSocket(6969);// define a porta
while (true) {
System.out.println("Aguardando Conexão...");
Socket conexao = s.accept();//cria um cliente para aceitar a conexao
//cria uma thread que envia a conexao
Thread t = new Servidor(conexao);
t.start();
System.out.println("Cliente conectado: " + conexao.getInetAddress().getHostAddress());
}
} catch (IOException e) {
System.out.println("Erro na conexão" + e);
}
}
public void run() {
try {
InputStream input = conexao.getInputStream();
OutputStream output = conexao.getOutputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(input));
PrintStream out = new PrintStream(output);
Scanner scanner = new Scanner(System.in);
while (true) {
//System.out.println("aguardando resposta do cliente...");
String mensagemC = in.readLine(); //Lê a mensagem
System.out.println("Mensagem recebida do cliente ("
+ conexao.getInetAddress().getHostName() + "): " + mensagemC);
if ("FIM".equals(mensagemC)) {
break;
}
}
} catch (IOException e) {
System.out.println("erro na troca de dados" + e);
}
}
}
Classe Cliente:
public class Cliente extends Thread {
private Socket conexao;
public Cliente(Socket s) {//recebe o valor do socket enviado na thread
conexao = s;
}
public static void main(String[] args) throws Exception {
try {
System.out.println("Iniciando cliente...");
Socket conexao = new Socket("localhost", 6969);
System.out.println("Iniciando conexão com o Servidor...");
Thread t = new Cliente(conexao);
//inicia o thread
t.start();
System.out.println("Conexão estabelecida.");
} catch (IOException e) {
System.out.println("Erro na conexão" + e);
}
}
public void run() {
try {
InputStream input = conexao.getInputStream();
OutputStream output = conexao.getOutputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(input));
PrintStream out = new PrintStream(output);
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("Digite uma mensagem para o servidor: ");
String mensagemC = scanner.nextLine();
out.println(mensagemC);
if ("FIM".equals(mensagemC)) {
break;
}
}
} catch (IOException e) {
System.out.println("Erro na troca de dados " + e);
} finally {//após o termino do try, o finally sera executado
try {
conexao.close();//fecha conexão do cliente
} catch (IOException e) {
System.out.println("Erro na troca de dados " + e);
}
}
}
}