socket read mkyong from examples example java sockets bufferedreader java-io

read - sockets java examples



Sockets: BufferedReader readLine() bloques (4)

Depende del protocolo. Si el servidor no cierra la secuencia, readLine se bloqueará hasta que se reciba el final de línea adecuado. Entonces, si el servidor nunca envía el final de línea correcto, estás bloqueado. Debería tal vez usar más métodos de bajo nivel e intentar obtener la documentación del protocolo o realizar una ingeniería inversa.

Estoy usando el método BufferedReader.readLine() para leer una respuesta de un servidor remoto (que está escrito en C y no tengo acceso al código fuente).

BufferedReader br = new BufferedReader(new InputStreamReader(in)); String line; while((line = br.readLine())!=null){ [...] }

Pero siempre bloquea en la última línea hasta que agota el tiempo. Entonces utilicé el siguiente código:

int b; while(true){ b = in.read; [...] }

y descubrí que la última lectura de byte tiene un valor entero de 13, que creo que es un retorno de carro, ¿no?

Entonces, ¿por qué readLine método readLine ? ¿Cómo suele indicar el servidor que se llega al final del flujo? Gracias.


En el caso de una conexión de red, la transmisión finaliza cuando el socket está cerrado.

Por lo tanto, es perfectamente normal que readLine() bloquee hasta que reciba un "final de línea" o cierre manualmente la conexión. Cuando su readLine() recibe el último carácter con el valor ''13'', la línea se lee y el ciclo se inicia nuevamente, esperando la siguiente línea.

No hay diferencia entre la "última línea" y las otras líneas.

Para detener el ciclo, debe cerrar manualmente la conexión en algún lugar o esperar el tiempo de espera. Pero sin más información sobre su protocolo de comunicación, es imposible ser más preciso al respecto.


Puede extender la condición while si no usa líneas vacías:

while((line = br.readLine())!=null && line.length() > 0) { // ... }


asegúrese de que el código del servidor tenga out.println () en lugar de out.print ()