Socket multi cliente

7 respostas
R

Olá pessoal, estava vendo algumas coisas de socket para fazer um novo modulo no sistema aqui da empresa e peguei uns tutoriais, mas ele mostra fazer um servidor e UM cliente, ai surgiu as dúvidas:

- Como fazer mais de um cliente (ilimitado)
- Como fazer a conexão de um cliente para outro como se fosse um comunicador
- Como fazer o cliente saber quais outros clientes estão conectado

Alguém ai pode me explicar ?
Valeu

7 Respostas

R

Um servidor, por natureza, é multi-cliente. Quando você escreve o lado servidor da aplicação, você deve abrir um socket para escutar requisições de cliente. É a famosa porta TCP. Quando um cliente pede para estabelecer uma comunicação, uma nova porta é aberta para realizar a comunicação de fato, liberando a porta original para atender novas requisições. A sua aplicação pode limitar o número de clientes atendidos, mas o número de conexões pode (e geralmente é) por outros mecanismos como o SO, firewall, etc.

Uma comunicação cliente-cliente é, na verdade uma comunicação cliente-servidor de 2 vias. Ou seja, um cliente desse tipo pode tanto pedir por conexões quanto ouvir por pedidos de comunicação. Em termos de socket, cada um deve ter um server socket e um client socket. Não é possível estabelecer uma conexão entre dois sockets clientes.

A informação sobre quais clientes estão conectados devem ser centralizadas no servidor.

Agora, é fato que desenvolver uma aplicação de rede conhecendo apenas a API de sockets é muito difícil. A API é apenas um facilitador para implementar esse tipo de aplicação. Você precisa conhecer muito bem protocolos de rede, pelo menos protocolos de aplicação, transporte e rede, para que você tome decisões de projeto corretas.

R

rmendes08:
Um servidor, por natureza, é multi-cliente. Quando você escreve o lado servidor da aplicação, você deve abrir um socket para escutar requisições de cliente. É a famosa porta TCP. Quando um cliente pede para estabelecer uma comunicação, uma nova porta é aberta para realizar a comunicação de fato, liberando a porta original para atender novas requisições. A sua aplicação pode limitar o número de clientes atendidos, mas o número de conexões pode (e geralmente é) por outros mecanismos como o SO, firewall, etc.

Uma comunicação cliente-cliente é, na verdade uma comunicação cliente-servidor de 2 vias. Ou seja, um cliente desse tipo pode tanto pedir por conexões quanto ouvir por pedidos de comunicação. Em termos de socket, cada um deve ter um server socket e um client socket. Não é possível estabelecer uma conexão entre dois sockets clientes.

A informação sobre quais clientes estão conectados devem ser centralizadas no servidor.

Agora, é fato que desenvolver uma aplicação de rede conhecendo apenas a API de sockets é muito difícil. A API é apenas um facilitador para implementar esse tipo de aplicação. Você precisa conhecer muito bem protocolos de rede, pelo menos protocolos de aplicação, transporte e rede, para que você tome decisões de projeto corretas.

mas como o criar vários clientes no servidor ? e como gerenciar a partir do servidor.accept() ?

R

Você cria uma Thread por cliente:

http://download.oracle.com/javase/tutorial/networking/sockets/clientServer.html#later

R

rmendes08:
Você cria uma Thread por cliente:

http://download.oracle.com/javase/tutorial/networking/sockets/clientServer.html#later


Consegui, achei um tutorial que explica, mas como eu faço para o servidor saber que um cliente quer falar com outro ?

R

É relativamente simples, o servidor tem que passar pro cliente A o IP do cliente B. Daí o cliente A tem que pedir uma conexão entre o cliente B. Uma outra opção é o servidor intermediar a conversa. O servidor mantêm as duas conexões, recebe a mensagem de A e envia para B. Pura estrutura de dados. A questão é que nesse ponto a API de sockets não vai te ajudar muito, porque você já entra na alçada da camada de aplicação. A API de sockets te oferece uma interface para a camada de transporte.

R

mas como fazer o cliente informar ao servidor que o mesmo quer conversar um determinado cliente ?

R

Cara, isso já faz parte do protocolo da sua aplicação. Você tem que enviar essa informação através do socket. É isso que você precisa entender, a não ser que você encontre algum protocolo pronto, você precisa desenvolver o seu, a API não vai te oferecer essa funcionalidade.

Criado 30 de junho de 2011
Ultima resposta 30 de jun. de 2011
Respostas 7
Participantes 2