Socket - Conexão Biderecional Estabelecida

5 respostas
danieltamiosso

Olá a todos,

Estou implementando uma comunicação entre dois sistemas, utilizando Socket’s. Até aí tudo bem, minha dúvida é se eu posso manter a conexão do cliente estabelecida com o servidor por tempo indeterminado. Pois o Servidor, funcionará como “cliente”, em algumas ocasiões, e o mesmo teria que poder mandar dados para o cliente real no momento que desejasse. Não sei se fui muito claro. Tipo, eu gostaria de instânciar a Classe Cliente uma vez, e ela conectar automaticamente no Servidor - até aqui tudo tranquilo. Só que agora precisaria no momento que eu quisesse mandar mensagens de ambos os lados - na hora que bem entenderem, utilizando a mesma conexão.
Fica minha dúvida se é possível essa implementação. Olhei vários exemplos, e todos eles fecham a conexão via socket depois de enviar e/ou receber dados…

Bom, muito obrigado a todos.

5 Respostas

ViniGodoy

Pode sim. A conexão só fecha se você fecha-la explicitamente ou no caso de um problema mais sério de rede (desligamento de uma das máquinas, retirada do cabo, etc).

otaviofcs

É, na verdade o que você vai ter que se preocupar é com uma recuperação em caso de perda de conexão inesperada…

danieltamiosso

Bom, muito obrigado a todos. Vou tentar implementar hoje. Qualquer coisa, podem ter certeza, que vou aparecer aqui novamente. :slight_smile:

danieltamiosso

Bom gurizada, só consegui implementar uma comunicação entre cliente-servidor, mas não consigo manter ela bidirecional como eu gostaria. Alguém têm um exemplo, ou algo do tipo?

Obrigado.

ViniGodoy

Bom, quando você estabelece uma conexão, ambas as classes ficam com um Socket.

O InputStream de um Socket é ligado ao OutputStream de outro, e vice-versa.

O problema é que, quando você está esperando um dado chegar, a sua thread para e, portanto, você não consegue enviar um novo dado.

Há duas soluções para isso:

  1. Bolar um procolo de aplicação baseado em pergunta/resposta;
  2. Usar uma thread para vigiar a entrada, enquanto outra thread controla a saída.

Tudo vai depender do tipo de aplicação que você está desenvolvendo. Mas, embora um mais complexa, geralmente é uma boa idéia implementar a segunda opção.

Criado 10 de janeiro de 2007
Ultima resposta 12 de jan. de 2007
Respostas 5
Participantes 3