Ir para conteúdo
Fórum Script Brasil
  • 0

Chat Em Java


kitsune

Pergunta

Eu estou tentando fazer um chat em java, mas o fato é que eu preciso conectar vários cliente ao meu servidor, sem que um sobreponha o outro, de modo, que para isso eu preciso usar threads, eu tenho uma noção muito rasteira sobre o assunto, muito embora, já tenha estudado threads em algum momento passado, mas o fato é que tudo o que eu estudei, não me preparou para atingir um nível de desenvolvimento de aplicativos o que torna muito difícil eu trabalhar um chat, quando não sei quando devo colocar ou onde uma thread, por favor, me ajudem!

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Olá Kitsune!

Pra começar, multithreading nada mais é que uma maneira de fazer seu programa assubiar e chupar cana ao mesmo tempo. Ao contrário do que acontece ao chamar as funções tradicionais, quando você cria uma Thread, o fluxo do programa não é interrompido. É como se o método fosse executado em segundo plano.

Por exemplo:

public class ThreadTest {
    
    public static void main(String[] args) {
        new MyThread().start();
        for(int i=900; i<1000; i++) {
            System.out.println(i);
        }
    }
}

class MyThread extends Thread {
    public void run() {
        for(int i=0; i<100; i++) {
            System.out.println(i);
        }
    }
}

Olhe o que aconteceu. Pois é, antes mesmo da função start() acabar, o programa já entrou no loop para escrever de 900 a 1000.

E como você pode usar isso no chat? Bem, se o chat funcionasse com uma pessoa só, você, naturalmente, usaria alguma função para ler o que está sendo escrito. Durante essa leitura, você não faria mais nada além de esperar o indivíduo terminar de digitar. Como isso não é viável com vários usuários, bastaria você criar uma Thread pra cada pessoa e, em cada uma delas, você esperaria o tempo que fosse necessário até receber a mensagem. Como as outras não param, o chat continua perfeitamente.

Na prática, cada Thread vai ter um loop infinito do tipo: espera mensagem; notifica o servidor; espera mensagem; notifica o servidor... Além disso, você pode fazer outra Thread que seja: espera mensagem do servidor; atualiza a tela; espera mensagem do servidor; atualiza a tela... Assim, tanto o usuário vai poder receber como vai poder enviar. wink.gif

ps.: Se você usar swing, a thread pra ler a entrada e notificar o servidor nem vai ser necessária; basta colocar em um listener.

[]'s

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu, então eu posso considerar que, se eu criar um método que possua uma thread na inicialização, e que cada objeto instanciado da minha classe a verá como uma variável de instância diferente, eu não preciso de várias threads, ou seja, basta uma dentro de uma classe ou método que faça sua ligação com o servidor?

Eu entendi tudo e que você disse, valeu mesmo, ajudou e é claro que utilizarei o pacote Swing, já que o método listener se encarrega de algumas coisas para mim. hehehe biggrin.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Essa é a idéia. biggrin.gif

Você poderia ter um classe Usuário e, no construtor dela, você passaria o socket.

Algo assim:

[no loop principal...]
while(true) {
    socket = serverSocket.accept();
    listaUsuarios.add(new Usuario(socket));
}

[na classe usuário...]
public Usuario(Socket s) {
    this.socket = s;
    new UsuarioThread().start(); // UsuarioThread pode ser uma inner class
}

[]'s

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...