Java - PROBLEMA DETECCIÓN EOF CON SOCKETS

 
Vista:

PROBLEMA DETECCIÓN EOF CON SOCKETS

Publicado por lmm (4 intervenciones) el 15/09/2004 13:53:37
Hola, a ver si alguien me puede ayudar. Tengo un cliente que envía vía socket un fichero al servidor. El problema es que el servidor no parece detectar el fin de fichero (que intento detectar comparando la línea leída con null). No sé si tiene algo que ver con el socket, o con la forma de detectar el fin de fichero. ¿Alguna sugerencia?, gracias.

while (true) {
String line = is.readLine();
System.out.println("reproduciendo : "+line);
if (line == null) break;
fichero.println(line);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:PROBLEMA DETECCIÓN EOF CON SOCKETS

Publicado por chuidiang (532 intervenciones) el 15/09/2004 14:27:17
Si abres los sockets de una forma standard, sin cambiarles opciones ni nada de eso, el fin de fichero de un socket se produce cuando el otro lado cierra la conexion.

readLine() lee hasta encontrar un caracter \n, así que asegurate de estar mandandolo desde el otro lado. Si no lo encuentra, lo normal es que readLine() se quede bloqueado esperando que llegue.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PROBLEMA DETECCIÓN EOF CON SOCKETS

Publicado por lmm (4 intervenciones) el 16/09/2004 08:51:17
ok, gracias. Revisaré a ver qué encuentro. El caso es que pienso que debe ser por la comunicación entre las dos máquinas. Me explico, el cliente lo tengo en una máquina y el servidor en otra. Ahora mismo tengo problemas también con las tildes: cuando me llega el fichero al servidor en lugar de tildes me aparecen ?; pienso que el problema del fin de fichero debe ser algo similar, no sé.
Gracias, y si se te ocurre algo más a raíz de esto que te digo por favor coméntamelo.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PROBLEMA DETECCIÓN EOF CON SOCKETS

Publicado por chuidiang (532 intervenciones) el 16/09/2004 09:44:43
Si una máquina es unix y la otra windows, el fin de linea es distinto. En windows un fin de linea son dos caracteres ( \r\n ) mientras que en unix solo es uno ( \n ).

Si windows envia a unix, no deberías tener problemas, salvo que quizás unix interpretará el \r como una letra más y te saldría un caracter extraño al final de la linea.

Si unix envía a windows, windows se quedará esperando eternamente por el \r que no llegará.

En la clase System, con getProperty ("line.separator") te devuelve el \n en unix o \r\n en windows. Quizás cambiando esta propiedad con setProperty () justo antes de leer del socket puedas hacer el arreglo.

De todas formas, estando en java en ambos lados, yo usaria el metodo writeUTF() y readUTF() que puede enviar un String sin depender para nada de la plataforma sobre la que estas.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PROBLEMA DETECCIÓN EOF CON SOCKETS

Publicado por chuidiang (532 intervenciones) el 16/09/2004 09:59:27
Releyendo tu mensaje, no se si estamos hablando de lo mismo. Yo hablo de fines de linea y tu de fichero.

Si el problema realmente es el fin de linea, te comento lo del primer mensaje. El fin de linea se obtiene cuando el otro lado cierra el socket() con un close(). Si no lo cierras al otro lado y no hay linea para leer, readLine() simplemente se queda colgado en espera.

Socket tiene un metodo getIntpuStream() que devuelve un InputStream(). Este no tienen metodo readLine(), asi que supongo que te has construido otro tipo se Strema a partir de este InputStream(). ¿Cual es?.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PROBLEMA DETECCIÓN EOF CON SOCKETS

Publicado por lmm (4 intervenciones) el 16/09/2004 12:42:17
Hola, ante todo muchas gracias. Mi problema es sólo con el fin de fichero; cuando dije que eran máquinas distintas te mentí (no a propósito claro); cliente y servidor están en la misma máquina. De momento he \"parcheado\" el problema, haciendo que el cliente envíe una línea adicional con un carácter específico de fin de fichero. No podía \"entretenerme\" más con este asunto. Ah, creo que lo que me preguntas es esto:

is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
os = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),true);

De todas formas no te preocupes, gracias por tu ayuda pero de momento lo voy a aparcar con la línea adicional, ya que así funciona.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar