Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/02/2012, 11:18
Txospo
 
Fecha de Ingreso: febrero-2012
Mensajes: 1
Antigüedad: 12 años, 2 meses
Puntos: 0
Problema al leer de un socket

El caso es que estoy haciendo una aplicación que se conecta a un Servidor FTP, en este caso a uno que he creado con Filezilla Server, y cuando quiero leer todo el contenido del socket hasta que este este vacío, este se queda como esperando en lugar de darse cuenta de que no hay datos. He estado leyendo y parece ser que el readLine() del BufferedReader es bloqueante y bloquea el socket. Quisiera saber que tengo que hacer. Coloco un ejemplo en java de lo que quiero hacer:

Código:
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Cliente {
    public static void main(String[] args) {
        try{    
                Socket sControl = new Socket("192.168.1.14", 21);
                System.out.println("Establecida conexión de control.");
                
                PrintStream salidaControl = new PrintStream(sControl.getOutputStream(),true);
                BufferedReader entradaControl = new BufferedReader(new InputStreamReader(sControl.getInputStream()));
                
                System.out.println(entradaControl.readLine());
                
                salidaControl.println("USER yo");
                System.out.println(entradaControl.readLine());
                
                salidaControl.println("PASS 4488");
                System.out.println(entradaControl.readLine());
                
                salidaControl.println("HELP");
                
                String line;
                while(true){
                    line = entradaControl.readLine(); //Aquí se queda esperando que le llegue algo para leer y no termina hasta que el servidor le expulsa de la sesión
                    if(line != null)
                        System.out.println(line);
                    else
                        break;
                }
                
                System.out.println("FUERA");
                
        }catch (IOException e) {
            System.out.println("Error en el cliente");
        }
    }
}
Espero que me puedan ayudar, un saludo.