Conexao socket client-server

Por favor, preciso de uma ajuda na leitura de dados de um programa servidor. Tenho um programa servidor que a cada conexão cria uma thread para tratá-la.
O trecho que roda na thread é o seguinte:

BufferedReader inFromClient = new BufferedReader(new InputStreamReader(conexao.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(conexao.getOutputStream());
System.out.println (“1”);
String chegada = inFromClient.readLine();
System.out.println (“2”);

O que está ocorrendo é que quando um client envia dados fica-se parado no comando readLine() e só passa para a linha seguinte quando o socket do client é fechado.
O que eu gostaria é de tratar imediatamente o que é recebido do client enquanto a conexão estiver ativa.
Agradeço qualquer ajuda.

Tenta usar um flush() ao final de cada dado a ser enviado.

cara quanto eu lido com sockets eu evito usar api bufferizada a menos que o protocolo seja orientado a linha ( exemplo: Redis ) e olhe lá.

verifique se vc ja pode ler com o metodo inFromClient.ready() que retorna um booleano true se ja pode ler.

agora se quem esta enviando dados usa uma api bufferizada, pode ser que vc não tenha nada pra ler pq nada chegou. nesse caso um flush do cliente pode ajudar.

Tiago,

obrigado por sua resposta. Eu implementei a sua sugestão ( o .ready() ) e ficou como mostrado a seguir:

while ( true )
{
if ( inFromClient.ready() == true )
{
System.out.println (“1”);
EscritaCliente = inFromClient.readLine();
System.out.println (“2”);
System.out.println(“Chegaram: “+EscritaCliente.length()+” bytes”);
outToClient.writeBytes(“Chegaram aqui “+EscritaCliente.length()+” bytes”);

  	System.out.println ("Fim de thread.");
  }
  else			
  	System.out.println ("Nada ha para ser lido");

}

O que ocorre é que enquanto não há nada para ser lido ele imprime na tela “Nada ha para ser lido”, porém quando há dados, entra-se no comando readLine() e de lá não sai enquanto o aplicativo cliente não for fechado.
O aplicativo cliente está em C e utiliza para envio a função send ().

ok

sugestões:
0. veja o que esta sendo enviado com send. o readline espera que tenha um \n ou \r\n e ai vc tem uma ‘linha’

  1. ao inves de ler uma ‘linha’, leia byte por byte ( ou char por char ) e imprima como forma de depurar o problema
  2. com o aplicativo wireshark verifique se o cliente esta REALMENTE enviando o que vc espera.

Tiago, obrigado, a sugestão 0 (zero) resolveu. Incluí na aplicação cliente um ‘\n’, aí tudo funcionou.
Muito obrigado.
Só não sei como marcar este tópico como resolvido …

JRCC