Thread e Socket.. alguma idéia de resolver esse problema?

tenho um trabalho pra entregar terça feira… sobre socket e thread… vou explicar qual o problema que eu estou tendo e ajuda de alguem pra ajudar:

eu tenho a classe Servidor… nela eu vou poder aceitar 2 clientes… entao criei um Socket com array de 2

Socket socket[] = new Socket[2];

até aqui beleza, a idéia é cada cliente conectar em uma socket…

depois eu espero os dois clientes conectarem e chamo o método start da thread

ServerSocket servidor = new ServerSocket(8081);
for (int i = 0; i < 2; i++) {
  socket[i] = servidor.accept();
}
Thread t = new Thread(this);
t.start();

dentro da classe eu usei implements Runnable, dentro do método run meu objetivo é… receber 1 palavra de cada terminal, inverter as palavras, retornar pra eles e quem descobrir primeiro a palavra do outro ganha o jogo… o problema é ae… como eu vou saber quem descobriu primeiro?? vai uma pedaço do método - detalhe, o DataInputStream e PrintStrem eu criei como array também de 2.

  /*recebe as palavras*/
  entrada[0] = new DataInputStrem(socket[0].getInputStream());
  entrada[1] = new DataInputStrem(socket[1].getInputStream());
  /*inverter e retornar para os terminais*/
  saida[0] = new PrintStream(socket[0].getOutputStream,true);
  saida[1] = new PrintStream(socket[1].getOutputStream,true);
  saida[0].println(entrada[1].readLine());
  saida[1].println(entrada[0].readLine());
 
  /* Agora nao sei como saber qual receber o retorno primeiro*/
  /* se eu fizer assim, vai esperar o socket 1 receber e depois o 2*/
  /* eu quero que o primeiro que receber termina o jogo*/
  entrada[0] = new DataInputStrem(socket[0].getInputStream());
  entrada[1] = new DataInputStrem(socket[1].getInputStream());
  /*Assim recebe 1 de cada vez*/

alguem ae tem alguma idéia de como eu posso fazer isso??

obrigado

Vc teria que tratar cada conexão em uma thread diferente…

só assim vc poderia esperar duas entradas e retornar a primeira…

do jeito que vc fez, fica sequencial…

enquanto o socket[0] não tiver nenhuma entrada no readLine o socket[1] não vai aguardar entrada…

Teria que ter um accept e ao receber uma conexão, lança uma thread… qdo receber outra conexão lança outra e assim por diante…

desta forma, cada thread aguarda sua entrada e retorna assim que receber o parametro correto…

pense em algo assim (espero ter entendido o problema exposto…)

Se precisar é só falar.

[]'s

Voce pode usar 2 threads, cada uma tratando de um socket, já que todas operações sobre sockets são blocantes, ou seja, enquanto não terminarem a thread fica parada esperando.

Outra solução seria utilizar sockets não blocantes com io multiplexado.

Mas se voce quer a solução mais simples, use o metodo available() do InputStream de cada socket, essa operação em especial não é blocante e pode te dizer quando tem dados disponíveis para leitura…

Kra , jah fiz tres trabalhos de redes semestre passado deste mesmo estilo…
A solução é vc criar Threads separados para cada socket…
QQ coisa eh soh falar que eu te mostro codigo mesmo…

T+

valeu pela Ajuda galera…

vou tentar primeiro esse método available() que o amigo louds disse, preciso de uma solução simples e que nao precise alterar tanto o código, pois preciso entregar isso amanha e hoje eu ainda tenho prova de matematica (sux), brasileiro deixa tudo pra ultima hora mesmo, hehehehe

qualquer coisa eu tento usar dois thread…

perguntinha sobre usar 2 threads…
no meu caso se eu colocar a instancia do Thread dentro do for quando aceitar a conexão funciona??
ou terei que criar 2 Threads usando array?

valeu… depois que eu terminar eu mando uma resposta se eu consegui

falo

deu certo o método avaliable

eu joguei dentro de um while

e ficava até algum retornar, e funcionou

valeu pessoal

Fala galera,

em um outro dia estamos falando sore isso, ai mandei um codigo fonte que usei em um curso:

http://www.guj.com.br/forum/viewtopic.php?t=2930#14224

Espero que seja util! :wink:

Abraco,