Loop Infinito

Galera a parada é o seguinte:
Eu estou criando um tipo de Bate papo em Rede em java…
Eu crio o Server, o Cliente, etc… tudo direitinho…
mas para q o cliente fique lendo as mensagens do Server(ou vice e versa) tem-se q fazer um loop infinito(se estiver errado me corrijam)…
mas qndo eu coloco o While a tela trava e enquando eu não finalizar um dos dois a tela fica travada…:cry:
podem me ajudar aee por favor?:lol:

Fiquem com DEUS!

Especifique…
Está usando Threads correto?

Desculpe se estiver respondendo errado…
estou usando sockets
O codigo do cliente está ficando assim:[code]Socket cliente = null;
DataInputStream entrada = null;

public void conectar() {
    try {
        cliente = new Socket("127.0.0.1", 5000);
        entrada = new DataInputStream(cliente.getInputStream());
        while (true) {
            imprimir("Entrada: " + entrada.readUTF());
        }
    } catch (UnknownHostException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        JOptionPane.showMessageDialog(null, "Erro!");
    } catch (IOException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        JOptionPane.showMessageDialog(null, "Erro!");
    } finally {
        
    }
}

public void imprimir(String msg) {
    in += "\n" + msg;
    jTextArea1.setText(in);
}[/code]

landantas ,

Boa noite !

Para vc desenvolver um chat , a melhor maneira é criando uma thread para tratar da conexão de cada cliente.

Veja os links abaixo , para aprender sobre threads em java.

Sobre Threads em Java: http://www.ime.usp.br/~gold/cursos/2004/mac438/threadsEmJava.pdf
Mais sobre thread: http://www.guj.com.br/articles/43

Galera…
como este aplicativo naum é definitivo eu estou criando apenas com o servidor e um cliente para ficar mais fácil…
Muda em alguma coisa?

Seguinte…Declara a sua classe com o servidor como uma thread…

public class Servidor extends Thread (ou implements Runnable, qualquer coisa da uma olhada nos links que o amigo ai de cima passou)

e no método run() dessa classe coloca +/- assim…

while(true){
    Socket cliente = server.accept();
    utilizaDadoRecebido(cliente);
}

Em que utilizaDadoRecebido(Socket cliente), você utiliza as informações que vierem no socket…repassar a mensagem por exemplo…

Bem, eu acho que isso ai da certo, embora não tenha testado xD se alguém quiser dar uma melhorada ae ^^
Boa sorte… :smiley:

Então landantas
Aconselho 3 coisas:

  • Primeiro: Estude o que é uma Thread e como ela se diferencia de um Processo (não só em Java, mas no contexto Sistema Operacional);
  • Segundo: Veja um exemplo de chat com sockets já feito, que provavelmente usará Threads e entenda como o código funciona (Aqui tem um artigo aqui do GUJ justamente sobre Threads e Sockets num programa de chat);
  • E por último e mais importante, estude Orientação a Objetos. Uma vez entendida você vai acabar entendendo como funcionam muitas classes do Java e qualquer outra linguagem orientada a objetos. Recomento fortemente que estude pelo menos esse super tutorial da Caelum (que acabo de me dar conta que apoia e desenvolve o GUJ :smiley: ), ele é muito completo. Aprendi muita coisa que julga saber nesse tutorial.

Espero ter ajudado.

PS: procura nos artigos do GUJ ou no mecanismo de busca do site que provavelmente já existe um tópico solucionado sobre o que você procura. Eu nunca precisei criar um tópico (que eu lembre), sempre achei respostas e ideias que me ajudaram.

Galera!!

Muito obrigado pelas respostas e Dicas…
Segui os conselhos dados sobre Thread e agora está rodando beleza o sistema…:smiley:

Qualquer coisa estamos aii!:wink:

Fiquem com Deus!

landantas, se entendi bem, você está utilizando uma GUI no servidor também, certo? Se sim, faz-se necessário o uso de threads. Caso contrário, poderias colocar o loop em um servidor que rodaria em background e pronto.

Abraço,

Danilo S. Morães

Aee galerinha:!:
A parada do loop para ler as mensagens já foi resolvido mas agora eu estou com outro problema:
Agora estou criando um joguinho em rede onde os cliente irão enviar o seu posicionamento e o servidor vai responder com o posicionamento dos outros jogadores…
Mas agora o problema é o seguinte:
Como fazer para vários clientes se conectarem pelo servidor em uma só porta…
o codigo está ficando + ou - assim:

[code] ServerSocket serverSocket = null;
DataInputStream input[] = null;
DataOutputStream output[] = null;
Socket socket[] = null;

public class iniciar extends Thread{
    @Override
    public void run(){
        try {
            serverSocket = new ServerSocket(5000);
        } catch (IOException ex) {
            Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
            System.err.println("Erro ao abrir a por 5000!!");
        }
        while (true) {                
            abrir_porta();
        }
    }
    
    public void abrir_porta(){
        try {
            socket[socket.length] = serverSocket.accept();
            input[input.length] = new DataInputStream(socket[input.length].getInputStream());
            output[output.length] = new DataOutputStream(socket[output.length].getOutputStream());
            output[output.length].writeUTF("Seja bem vindo!");
            //System.err.println("Conexao Iniciada!");
        } catch (IOException ex) {
            //Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
            System.err.println("Erro!!");
        }
    }
}[/code]

Este código está certo:?:
Qualquer dica eu agradeço…

Fiquem com DEUS:!:

Ah:!:
E quando eu executo dá esse erro:

Exception in thread "Thread-3" java.lang.NullPointerException at jogo.Servidor$iniciar.abrir_porta(Servidor.java:22) at jogo.Servidor$iniciar.run(Servidor.java:16)

Fiquem com DEUS:!:

[quote=landantas]Ah:!:
E quando eu executo dá esse erro:

Exception in thread "Thread-3" java.lang.NullPointerException at jogo.Servidor$iniciar.abrir_porta(Servidor.java:22) at jogo.Servidor$iniciar.run(Servidor.java:16)

Fiquem com DEUS:!:[/quote]

[b]Onde está o seu deus agora?[/b]

Então cara o problema ai é que seu socket esta no limbo. Resolver esse problema é uma jornada a qual tens que seguir sozinho filho :).