Problema com streams

2 respostas
L

Estou desenvolvendo um aplicativo usando sockets, na qual dados de uma JTextArea são enviados para outra aplicação que lê a string ta JTextArea e supostamente deveria imprimir todo conteúdo do JTextArea do cliente no JTextArea do servidor. O programa também envia os dados digitados, ou seja, os caracteres do JTextArea do cliente em tempo real para o servidor, conforme as teclas vão sendo pressionadasm, ou seja, não existe um botão do tipo “Send”.
Acontece o seguinte; a string vai sendo recebida corretamente, em tempo real, sendo “jogada” no JTextArea do servidor. O problema é quando o usuário cliente pressiona a tecla Enter. Quando isso acontece, ao invés de no JTextArea do servidor, uma linha ser pulada, ele simplesmente apaga tudo e só escreve o é digitado posteriormente ao Enter ter sido teclado.

O trecho do servidor responsável pela leitura, onde a variável in é como se segue:

BufferedReader	in = new BufferedReader(
		new InputStreamReader(
			clientSocket.getInputStream()));

E o trecho responsável pela leitura do stream é:

String input = in.readLine();
			while (input != null) 
			{
				if(jTextAreaFriend.getLineCount() >
					jTextAreaFriend.getRows()) 
				{
					int rows = jTextAreaFriend.getRows();
					jTextAreaFriend.setRows(++rows);
				}
				
				if(input.contains("<ENTER>")) {
					input = input.replaceAll("<ENTER>", "\n");
				}
				
				jTextAreaFriend.setText(input);
				input = in.readLine();
			}

Não sei bem pq no servidor ele so passa a considerar, nas leituras subsequentes tudo que é digita após o ENTER.
Lendo o javadoc do BufferedReader, pude constatar que ele descarta os caracteres de new line, talvez isso faça com o que o ENTER não funcione.
Alguém pode me ajudar? Existe algum stream que possa ler uma string, INCLUINDO o caracter de new line? Em suma, eu quero que quando o usuário pule uma linha com a tecla Enter, o mesmo efeito seja observado na servidor. Acredito que a respota esteja no stream.

Grato.

2 Respostas

ViniGodoy

Você pode ler do stream diretamente, ao invés de usar o readLine.

int input = in.read(); while (input != -1) { jTextAreaFriend.append(new String(new Byte[] {(byte)input})); input = in.read(); }

Quem remove o \n é o método readLine.

L

ViniGodoy:
Você pode ler do stream diretamente, ao invés de usar o readLine.

int input = in.read(); while (input != -1) { jTextAreaFriend.append(new String(new Byte[] {(byte)input})); input = in.read(); }

Quem remove o \n é o método readLine.

Po, brigadão ViniGodoy!

Tive que fazer vários ajustes p/ adaptar no meu código mas agora tá funcionando beleza!

Um abraço

Criado 8 de maio de 2007
Ultima resposta 9 de mai. de 2007
Respostas 2
Participantes 2