Chat com Sockets

4 respostas
S

Boa Noite pessoal.

Estou fazendo aqui pra passar o tempo um messenger utilizando sockets.
Li o tutorial aqui do GUJ, foi de grande valida, mas tenho alguns problemas.

  • Como fazer que o servidor sempre fique escutando dados que entrem na porta que eu abra o socket?
  • Quando eu utilizo o método accept() do socket, ele fica esperando entrar algo p/ dar continuidade ao processo. Não quero ter que executar duas classes separadas, queria executar tudo na mesma aplicação (Cliente/Servidor)

Se alguem me mostrar pelo menos a direção a tomar, eu agradeço :slight_smile:

[]'s

4 Respostas

_Renatu

Ola

Bom, para voce fazer com que o servidor sempre fique escutando os dados, voce pode colocar num while infinito, ou entao num while até que uma mensagem especifica chegue no servidor (“sair”, por exemplo).

Neste caso, se voce quiser que seu servidor “escute” mais que um cliente ao mesmo tempo, voce terá que criar uma thread para “escutar” cada cliente.

Executar tudo na mesma aplicação nao implica em você utilizar apenas uma classe, voce pode ter mais que uma classe por aplicação… nao entendi muito bem o segundo problema, voce pode explicar melhor?

S

Digamos assim:

Servidor serv = new Servidor();
serv.iniciaServidor(27001)
serv.listenCliente(Main.serversock); //Onde Main.serversock é só uma variavel que recebe uma conexao do Tipo serverSocket. 
System.out.println("eee");

O problema é com listenCliente()

public void listenCliente(ServerSocket servSocket) { String msg = null; BufferedReader entrada = null; try { Main.clienteSocket = servSocket.accept(); entrada = new BufferedReader(new InputStreamReader(Main.clienteSocket.getInputStream())); msg = entrada.readLine(); System.out.println(msg); } catch (Exception err) { msg = "Erro : " + err.getMessage(); } }

Quando eu chamo o método accept(), trava toda a aplicação, esperando entrar algum dado. Queria deixar sei lá … como se fosse em segundo plano, um listener somente. Ele não chega nem a chama o código “System.out.println(“eee”);”

Espero que tenha me expressado bem agora :stuck_out_tongue:

[]'s

_Renatu

Entendi sim…

Bom, pra você conseguir fazer isto que está querendo, vai ter que trabalhar com threads mesmo…

Este método accept realmente “trava” até receber a conexão do cliente…

Se você nao quer que ele se comporte assim na sua GUI, vai ter que rodar este processo em paralelo, em uma outra thread…

L

poderia postar o código fonte para mim poder me basear e aprender um pouco sobre sockets?

Criado 12 de novembro de 2007
Ultima resposta 28 de jul. de 2008
Respostas 4
Participantes 3