Desculpa pessoal por criar esse tópico, mas gostaria de saber a fundo como funciona esse método.
No mais o que eu consegui achar foi que ele para a Thread do servidor e aguarda uma nova conexão e retorna uma socket para a comunicação do cliente.
Só que eu queria saber qual é relação estabelicida por entre esse socket do método accept() e o socket criado pelo cliente. Pois eu queria criar um chat que todos os clientes conectassem com o servidor da aplicação e escolham um único contato para trocar mensagens. Então essas mensagens ficariam dedicadas, como numa seção do msn mesenger. Só que estou tendo dificuldades para achar uma solução prática. Então pensei na relação entre os sockets.
Ou então, queria extender a classe ServerSocket para funcionar da forma que eu queria. Se alguém tiver uma solução mais simples de como funciona para manter um único servidor de chat, com vários usuários e com as mensagens dedicadas entre 2 clientes como no messenger, ou me enviem o código implementado da classe ServerSocket que assim eu adapto para a minha necessidade.
Sinceramente, não sei se aqui foi o lugar certo para fazer tal pedido, mas agradeço a colaboração
[]'s :?: :shock: :!:
Fabinho,
Não existe essa relação, vc vai ter que guardar e identificar esses sockets dos clientes em um Map por exemplo. Nesse Map você guardaria o nickname do cliente e o Socket de conexão, tipo:
Map<String, Socket> clientes = new HashMap<String, Socket>();
clientes.put("nickname", socket);
Para obter o nickname vc pode implementar uma lógica para logo após receber a conexão do cliente, ele enviar o nickname:
Socket socket = serverSocket.accept();
String nickname = recebeNickname(socket.getInputStream());
clientesMap.put(nickname, socket);
Para fazer a comunicação entre um cliente com o outro, o cliente envia a mensagem junto com o nickname do usuario de destino. Ai vc obtem o socket de conexão desse através do seu Map e envia a mensagem.
Socket socket = clientesMap.get(nickname);
enviaMensagem(socket.getOutputStream(), mensagem);
Boa não tinha pensado no HashMap
Aff, pior que eu mecho direto com HashMap para passagens de parâmetros para o JasperReports.
Flw leonardom
Vou testar
:idea: :arrow:
Vc tem um código mais completo aí?
estou tendo um pouco de dificuldades…
Não tenho código completo. Mas em qual parte esta tendo dificuldades?
Por exemplo,
Se eu tiver um servidor numa máquina e eu queria acessar com um cliente em uma outra máquina. Como eu passaria o parâmetro do nickname, como se daria essa comunicação?
O cliente ao conectar tudo bem eu faria um HashMap, mas como eu faria no caso da máquina do servidor. Como eu poderia dizer que o socket “x” representa a um específico nickname?
sei q devo evitar mensagens nada a ver com o tópico… mas num tem como:
Cara, q gif da hora!
Esse comentário não vai ajudar na minha dúvida mas obrigado assim mesmo
Fabinho,
Quando vc tem um conexão estabelecida (cliente -> servidor) vc vai ter o input e output do Socket. No caso do cliente através do input (socket.getInputStream()) vc vai poder ler mensagens vindas do servidor e através do output (socket.getOutputStream()) vc vai poder enviar dados/mensagens para o servidor. No caso do nickname vc usaria o output para enviar para o servidor e no lado do servidor vc irá ler esse nickname atraves do input.
Acho que você tem que estudar um pouco mais sobre Sockets e IO para conseguir implementar o que deseja. Eu indico a apostila da Caleum http://downloads.caelum.com.br/apostila/caelum-java-objetos-fj11.pdf. Na apostila tem um capítulo sobre IO e no final da apostila tem um apendice sobre Sockets o qual ensina implementar um servidor e um cliente.