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.
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.
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 ().
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 …