Foros del Web » Programación para mayores de 30 ;) » Java »

Problema con readLine() y sockets Java

Estas en el tema de Problema con readLine() y sockets Java en el foro de Java en Foros del Web. hola. Espero y alguien me pueda ayudar con esto. tengo una aplicación que abre un socket y leo una cadena recibida para procesarla de esta ...
  #1 (permalink)  
Antiguo 20/12/2011, 11:16
 
Fecha de Ingreso: marzo-2010
Mensajes: 64
Antigüedad: 14 años, 7 meses
Puntos: 2
Problema con readLine() y sockets Java

hola.

Espero y alguien me pueda ayudar con esto.

tengo una aplicación que abre un socket y leo una cadena recibida para procesarla de esta manera.

Código:
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
para obtener los datos recibidos aplico readLine de esta manera

Código:
String datos = in.readLine();
y el problema es el siguiente

en el socket yo recibo una cadena así:

"#252485#00#M32#"

y según he leído el readLine debe encontrar un \n o \r como tope para leer la linea
y no tengo manera de que, de donde recibo esta cadena, pueda agregar el salto de linea.

quisiera saber si hay alguna manera de agregarle el salto de linea al recibir los datos del socket o simplemente cuando hago el readLine decirle que solo lea cierta cantidad de caracteres

Desde ya agradezco cualquier ayuda.
  #2 (permalink)  
Antiguo 20/12/2011, 12:49
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años
Puntos: 454
Respuesta: Problema con readLine() y sockets Java

Si el otro lado no envía líneas (texto terminado en \n o \r), no uses readLine(). Hay muchos métodos para leer bytes de un Stream y muchas clases similares a BufferedReader() para meter el InputStream() según qué quieras leer. Mira por ejemplo, DataInputStream, ObjectInputStream, InputStreamReader, etc, etc.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 20/12/2011, 13:26
 
Fecha de Ingreso: marzo-2010
Mensajes: 64
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Problema con readLine() y sockets Java

Ok entiendo y creo que estoy muy verde para esto.

Serias tan amable de poner algún ejemplo de como obtener en la variable datos la cadena recibida, con estos métodos que me comentas.

y en verdad muchísimas gracias por tu pronta respuesta.
  #4 (permalink)  
Antiguo 20/12/2011, 14:48
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años
Puntos: 454
Respuesta: Problema con readLine() y sockets Java

¿Qué programa manda esa cadena y cómo la manda? ¿Otro programa java? ¿O un programa en un lenguaje nativo como C/C++? Si es java .... ¿Cómo la escribe?

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 20/12/2011, 16:25
 
Fecha de Ingreso: marzo-2010
Mensajes: 64
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Problema con readLine() y sockets Java

no es ningun programa es un dispositivo que hace una conexión a mi aplicacion.
y manda la cadena anterior.

lo que acabo de hacer y al parecer esta funcionando es lo siguiente
recibo los datos en el buffer:
Código:
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
pero en lugar de leer toda la linea con

Código:
String dato = in.readLine();
leo caracter por caracter con el siguiente while

Código:
   boolean reading = true;
   while(reading){
          if(in.ready()){
                c = (char) in.read();//convierte ascii
                 dato= dato+c;
          }else{
                 reading = false;
          }
    }
cuando no se cumpla la condición del IF quiere decir que la cadena ha terminado
por lo tanto obtengo la misma cadena que readLine(); pero sin salto de linea

Dejo mi solución por si a alguien le pasara lo mismo.

y en verdad muchas gracias @chuidiang

Etiquetas: readline, sockets, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:58.