Socket

Galera estou a mais ou menos 1 mes tentando resolver um problema em socket e nao consigo la vai:

Tenho um servidor que aceita diversas conexão de clientes, guardo todos dentro de um vetor digamos que eu queira mandar uma mensagem para um determinado cliente que nao sei em que posição do meu vetor esta como faço isso? nao quero ter que mandar para todos apenas para um aquele que eu necessito.

Isso nao eh nem problema de socket eh um problema de java mesmo.
O que eu pensei agora eh vc tipo quando um cliente conectar no seu server vc monta por exemplo uma HashTable com o cliente e em qual posicao do seu array o socket para aquela conexao esta. Ai fica facil trabalhar com esse socket especifico.

//Daniel

Você tem que criar um identificador para o seu client, esse identificador é enviado ao se conectar com o servidor.
Esse id será usado para ser a chave do cliente em um Map, de preferencia um HashMap.

Valeu


Alysson Bandeira

É como eu te falei, você precisa definir um protocolo.

Por exemplo, você pode definir que seus clientes vão mandar no primeiro byte o número de quem querem falar, ou -1 caso queiram fazer o broadcast da mensagem.

Assim, todo pacote que você receber de um cliente no servidor você faria como no pseudocódigo abaixo:

[code]
int destino = sockStream.readByte();
if (destino == -1)
{
broadCastMessage(sockStream);
return;
}

sockets.get(destino).sendMessage(stream);[/code]

É claro que, quando um cliente seu conectar, o servidor deverá dizer a ele quem é que existe, através de algum tipo de mensagem especial.
E essa informação deverá ser atualizada sempre que alguém entrar ou sair da conversa.