Não posso fazer uma verificação “if(buffereadreader.ready()” para ler do buffer por que eu so posso escrever se eu tiver lido.
Porem quando não tem nada escrito no buffer ele fica preso. E não é lançado nenhuma exceção.
Alguem saberia como deixar um limite de espera pro readLine() ou algo parecido?
Puxa vida, a solução é bem complicada, mas deve funcionar.
A propósito, por que é que você precisa de um “timeout” para a leitura desses dados?
schkr4b
Eh uma aplicação cliente servidor… O que ocorre é que eu não posso ficar escrevendo sempre para o cliente, já que ele trata as mensagens uma a uma… Então toda vez que ele recebe a mensagem ele me responde informand oque já recebeu (pego a resposta no readLine())…
Então o que ocorre é que caso ele não receba a mensagen então ele não vai me responder…
Ou seja… Se eu puder colocar um tempo de espera no bufferedreader… passados 30 segundos por exemplo eu sei que aconteceu alguma coisa no client… Ou ele perdeu a conexao… Ou não recebeu a mensagem corretamente…
Quando eu perco a conexao quando ele cai no bufferedreader depois de um tempo ele cai no catch e por isso eu consigo tratar perfeitamente essa parte.
Sabem alguma outra solução?
Vou ler o link que voce me mandou ainda hoje e vejo se eh ou nao viavel implementar isso ai e falo aqui pra voces…
Vlw!
T
thingol
Puxa vida, não se manda informações via socket com um formato texto devido a esses problemas chatos que você está encontrando agora.
Normalmente eu mudaria o protocolo para que sempre mandasse as informações com um indicador de comprimento antes dos dados. (Pode ser em 2 ou 4 bytes).
Então tanto o cliente quanto o servidor estariam preparados para ler exatamente a quantidade certa de dados.
De qualquer forma, ainda não entendi porque é que você realmente não pode esperar. Você reserva uma thread para cada cliente do seu servidor?
schkr4b
Exato.
Uma Thread pra cada cliente.
Não posso esperar porque eu mostro pro usuario a lista de clientes conectados.
Seu eu nao leio uma resposta do cliente é porque ele não está mais conectado e por isso eu removo ele da lista e mato a thread…
Ate pra nao ficar com threads presas no readLine() sem nenhuma utilidade…
Kamikaze
Kara de uma olha nesse site e veja se te ajuda. Eu vi meio por cima.
Espero que te ajude!