Thread?

6 respostas
I

Tenho q fazer um Binder (Servidor de Nome) simples…

ele vai receber conexões de SERVIDORES e CLIENTES

os SERVIDORES se conecta para informar o SERVIÇO/NOME que ele oferece…

e os CLIENTES se conecta para localizar o IP do SERVIÇO que ele precisa.

Pergunta… Alguém me dá uma luz de como o BINDER vai receber a conexões??? vou ter q utilizar THREADs???

Muito Obrigado!
Italo Naia

6 Respostas

M

A idéia é +/- essa:

public class ServerThread extends Thread {
  private final static int PORT = 8000;

  public ServerMainThread(Lector owner) {
    this.start();
  }

  public void run() {
    try {
      ServerSocket s = new ServerSocket(PORT);  //Cria ServerSocket
      try {
        while (true) {
          Socket socket = s.accept();       
                    //Espera elguém se conectar a ele
                    //Quando alguém se conecta ele
                    //Cria uma variável socket que 
                    //Está com uma conexão ativa
                    //E é por ela que vc poderá fazer
                    //Toda a comunicação necessária.
        }
      } finally {
        s.close();
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

}

espero ter ajudado.
Abraço,
Maicon

I

maicon_b Vlw brigado…

entaum naum preciso usar Threads???

M

Olhe bem o código que eu lhe mandei:

“public class ServerThread extends Thread”

Ela é uma classe que extende Thread, esperando uma conexão…
Não seria necessário thread alguma se vc só usasse a classe para ver se alguém se conectasse a vc, mas já que vc vai querer enviar e/ou receber dados então é obrigatório o uso de thread, ao contrário a sua aplicação vai praticamente travar, por motivo do while(true){}

Uma idéia que eu não passeo pra vc é a seguinte, montar um método que recebe como parâmentro o socket que vc criou, instanciando-a para cada socket separado.

Espero ter sido claro,
Abraço,
Maicon

I

Minha idéia é a seguinte… me corrija se estiver errado…por favor…

1 - vou ter um arquivo chamado BINDER.JAVA
nele vou criar a inteface com um botão pra iniciar …

2 - ao clickar no botão… eu vou chama uma outra CLASSE (q usára thread) e com o While para esperar a conexão…

3 - e a cada conexão Aceita… chamo uma outra classe (tbm usará THREAD???) passando o socket como parametro… para trocar informções com o cliente

agora vem as dúvidas:

eu realmente preciso dá 3º classe??? ou eu posso trocar informações na 2º classe mesmo???

bom ve ai o q mais vc acha??? se to certo?? errado???

brigadão maicon_b
ta me ajudando Pakas!!!

M

Eu fiz um sistema da seguinte forma:
Eu tenho um servidor de arquivos, assim que alguém se conecta a ele, o servidor gera um socket com o tal socket.accept();
Essa classe que executa o tal do socket.accept(); está numa thread para não travar o programa, então ele fica presso no método accept() até que algum cliente se conecte a ele, assim que alguem cliente se conectou, o método accept retorna um socket para outra variável, que por sua vez eu fogo em outra classe que não necessariamente precise ser uma tread, mas seria o ideal.

//Somente um exemplo para entendimento:

//Classe Principal.java
public class Principal{
  Thread espClients;
  public void main(String args[]){
    espClients = new EsperaClients();
  }
}

//Classe EsperaClients extendida de thread
public class EsperaClients extends Thread{
  public EsperaClients(){
    start();
  }
  public void run(){
    try { 
      ServerSocket s = new ServerSocket(8000);
      try { 
        while (true) { 
          Socket socket = s.accept();   
          ServerThread(socket);      
        } 
      } finally { 
        s.close(); 
      } 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
  }
}

//Classe que fará todo o serviço necessário com o socket estabelecido
public class ServerThread extends Thread {
  private Socket socket;
  public ServerThread(Socket socket) {
    this.socket = socket;
    start();
  }
  public void run(){
    //Adicione aki o que vc deseja fazer com o socket.
    //Ex: enviar algum Stream...
    socket.getOutputStream().......;
  }
}

Obs: Este código fiz agora no braço, sem testes, então não sei se irá funcionar, talvés será necessário ulgunas pequenas correções.

Espero ter ajudado,
Abraço,
Maicon

I

legal… era isso mesmo q eu estava em mente…

brigadão maicon…
ajudou pakas

Criado 19 de maio de 2004
Ultima resposta 20 de mai. de 2004
Respostas 6
Participantes 2