Socket - mais de um cliente em uma porta?

Pessoal,

Tenho uma dúvida básica, ao criar um servidor socket é determinada a porta onde será realizada a conexão do cliente.

Caso eu necessite ter vários clientes, para cada um deles terei de especificar uma porta no lado servidor ? Caso positivo, como meus clientes saberão a porta em que devem conectar ?

Obrigado !

  1. Não; é só criar uma conexão para cada cliente.

Um exemplo clássico é o http e seu browser. Todo mundo que quer acessar o GUJ usa a porta 80.

(Usualmente para cada nova conexão você cria uma nova thread, se quiser gastar recursos da máquina - nesse caso você tem N clientes com N threads, sendo 1 thread para cada cliente - ou então usa algum framework de NIO, como o Apache Mina, se quiser atender N clientes com M threads, onde N >>> M.)

Saquei,

Então para cada cliente crio uma thread “servidor” para escutar na mesma porta.

Blz pura.

Mas me diz uma coisa, digamos que eu tenha 10 clientes ou menos. Minha aplicação já deve sair criando as 10 threads servidor mesmo que apenas um cliente faça conexão, certo ?
Ou existe alguma forma de que a cada requisição cliente seja aberta uma thread server ?

Não, você tera por exemplo uma classe Servidor que pode extender um Thread.
No método run, você faz um while true que funciona +/- assim, para conexões tcp.

Você criar um novo ServerSocket escutando em um porta…
e faz um serverSocket.accept()…
enquanto ninguem se conectar, a execução fica parada neste ponto…
quando um client se conectar vc recebe um objeto Socket como retorno do método accept.
Esse socket é a comunicacao entre o server e o client…
Caso queira pode então instancia um objeto “usuario” no servidor passando o socket pra ele…
e pronto…
seu loop vai voltar ao inicio, aguardando outra conexão…

Caso queira vc pode adiciona o seu objeto “usuario” em um lista, tendo assim uma referencia para
todos os usuários conectandos, podendo assim enviar dados para todos que quiser.

hitcurst,

Entendi, só fiquei com uma dúvida.

Quando eu criar a lista de objetos cliente (usuario) passando o socket, a classe de objetos usuário estende a classe thread ou não necessariamente ?

Não necessáriamente, a não ser que você queira ter por exemplo 2 conexões por usuário, sendo
uma que só recebe e outra que só transmite…
dai no método run por exemplo
ele fica sempre verificando se recebeu algum dado…
para já processar e re-transmitir novamente.

Vai depender do que você precisa para sua aplicação