Problemas no BufferedReader para Telnet

2 respostas
B

Socket socket;
BufferedReader in = new BufferedReader(new InputStreamReader socket.getInputStream()));

String line = in.readLine();

if (line.equalsIgnoreCase(“teste”)) System.out.println(“Teste”);

Eu nao escrevi aqui o codigo todo do programa q estou a fazer mas acho q isto aqui é suficiente para explicar o meu problema.
O problema é que o in.readLine() vai ler todos os caracteres que eu teclar (mesmo os backspaces), logo quando chega a altura de comparar a String line com “teste” se a pessoa tiver feito backspaces lá pelo meio, ele vai dizer q sao Strings diferentes. Como posso ultrapassar este problema?

Neste momento fiz um método statico que analisa a string e remove todos os backspaces mais o caracter introduzido antes do backspace mas nao sei se é o metodo correcto.

Só para concluir, o funcionamento deste readLine() é o seguinte: Se o user escrever “Teste” e apagar as ultimas duas letras (te) e voltar a escreve las o que ele vai guardar na String é = {T - e - s - t - e - Backspace - Backspace - t - e}

Espero que alguem me possa ajudar nisto, obrigado.

2 Respostas

Guilherme_Silveira

nao creio q isso seja um bug e sim que voce esta enviando os caracteres em tempo real.
nesse caso voce pode estar dando um flush na sua stream somente no momento que voce receber um ENTER. isso evitaria qualquer coisa desse genero.

mas para isso eh necessario entender quem afinal eh o client pq nesse seu codigo ele mesmo eh o server. o client tambem eh teu e em java? voce pode altera-lo para dar flush no enter?

caso voce esteja montando um server telnet comum, provavelmente isto nao eh um erro e sim algo que deve ser lidado, pois eh soh fazer um telnet para diferentes maquinas que voce percebe que eles recebem as strings do jeito que voce falou…

guilherme

Rafael_Steil

Apenas para complementar a ideia do Guilherme:

note que voce esta fazendo uma aplicacao client/server, entao cada tecla digitada eh enviada do cliente para o servidor, nao importando o tipo dela. Se voce for reparar bem, note que quando conectamos a algum server remoto, a cada digito nosso as luzes do modem piscam, ou seja, pacotes sao trafegados.

Uma saida de fato eh colocar tudo em um buffer local para so depois enviar para o servidor, mas ai ja seria necessario mudar a implementacao do programa. No site da sun ( tanto em http://java.sun.com como em http://develper.java.sun.com ) ha bons exemplos sobre Sockets.

Qualquer coisa, estamos ai!

Rafael Steil

Criado 12 de setembro de 2002
Ultima resposta 12 de set. de 2002
Respostas 2
Participantes 3