Ajuda com Cliente-Servidor (Enviar mensagem para todos clientes)

0 respostas
servidorjava
Juniorcap08

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);
            }
        }
    }
}
Criado 10 de novembro de 2016
Respostas 0
Participantes 1