Demo Blog

Multi Thread Socket em Java

por Anônimo

Aqui ensino como fazer uma comunicação entre um cliente e um servidor utilizando sockets em Java, o código esta bem comentado, espero que ajude ! =]


import java.net.*;
import java.io.*;

/**
 *
 * @author Valter
 */
public class Servidor implements Runnable {

    ServerSocket ss;

    public Servidor(int porta) throws Exception {

        // informando em qual porta o servidor estará ouvindo
        ss = new ServerSocket(porta);

        // criando uma nova thread e já estou inicializando ela
        new Thread(this).start();

        // mensagem iniicial
        System.out.println("Servidor ouvindo na porta:" + porta);

    }

    public void run() {
        try {
            while (true) {
                // aceitando a conexão com o cliente e inicializando a outra thread
                new TrataCliente(ss.accept()).start();
                System.out.println("Mais um cliente atendido!");

            }

        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
    }

    public static void main(String[] args) {
        try {
            new Servidor(1024);

        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
    }
}

class TrataCliente extends Thread {

    private Socket client;

    public TrataCliente(Socket s) {
        client = s;
    }

    public void run() {
        try {
            // aqui vai a sua comunicacao com o cliente
            ObjectInputStream oi = new ObjectInputStream(client.getInputStream());

            // exibindo na tela o que recebemos do nosso cliente
            System.out.println("Chegou isso:" + oi.readObject());

            client.close();

        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
    }
}

O nosso cliente
import java.net.*;
import java.io.*;

/**
 *
 * @author Valter
 */
public class Cliente extends Thread {

    // aqui no nosso caso será o 'localhost' que o ip da própria maquina aonde você executará
    private String server;
    // neste caso utilizaremos a partir da porta 1024, sendo que menor são para o Sistema Operacional
    private int porta;
    // aqui será a nossa string que será enviada para o servidor e ficará repetindo diversas vezes
    private String texto;

    public Cliente(String server, int porta) {
        try{
        // preparando o buffer para ler a stream (no caso o teclado)
        BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
        
        // estamos lendo a stream que esta vindo do usuário
        texto = inFromUser.readLine();

        }catch(Exception e){
            e.printStackTrace();
        }

        this.server = server;
        this.porta = porta;
    }

    public static void main(String[] args) {
        try {

            // inicializando quem será nosso servidor (nossa máquina)
            String server = "localhost";
            
            // o numero da porta
            int porta = 1024;

            // o numero máx de clientes que podem ser atendidos, mais que isso começaremos a ter muitas exceções
            int numeroDeClientes = 10;

            for (int i = 0; i < numeroDeClientes; i++) {

                // criando um novo cliente para nosso servidor
                new Cliente(server, porta).start();

            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void run() {
        try {

            while (true) {

                // abrindo uma porta para fazermos a comunicação entre nosso cliente e nosso servidor
                Socket s = new Socket(server, porta);

                // instaciando para enviarmos ao nosso servidor o que digitamos no cliente
                ObjectOutputStream oo = new ObjectOutputStream(s.getOutputStream());

                // informando aonde estamos conectados
                System.out.println("Conectado a " + server + ":" + porta);

                // enviando ao nosso servidor a nossa string
                oo.writeObject(texto);

                //fechando a nossa conexão
                s.close();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


Lembrando que para rodar o programa, vá no prompt , localize a pasta onde esta o servidor.java e o cliente.java, então faça o comando:
javac servidor.java
depois
java cliente.java
para testar, em uma janela do prompt você digita:
java servidor
em outra janela, voce digita:
java cliente
então no cliente você colocaria :
11111111111111 (por exemplo)
ao abrir outra janela, coloque:
22222222222222 (por exemplo)
no servidor você verá que fica alternando entre 1111111111 e 222222222222, e assim vai,rs.
Bem eh isso galera, um forte abraço.
2 comentários mais...

2 comentários

Postar um comentário

Procura algo?

Busque aqui para achar algo no site:

Caso não tenha achado o que procurava, me envie um email para que eu possa cuidar disso para você.

Paperblog :Os melhores artigos dos blogs