Encontre otra posible forma de solucionarlo, sería estableciendo el tiempo de espera del readLine() con .setSocketTimeout() y así si después de esperar no llega nada elimina el bloqueo:
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.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class Cliente {
PrintStream salidaControl = null;
BufferedReader entradaControl = null;
public void run(){
try{
Socket sControl = new Socket("192.168.1.14", 21);//;
sControl.setSoTimeout(6000); //Digo cuál será el tiempo de espera
System.out.println("Establecida conexión de control.");
salidaControl = new PrintStream(sControl.getOutputStream(),true);
entradaControl = new BufferedReader(new InputStreamReader(sControl.getInputStream()), 8192);
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");
leer();
System.out.println("SALGO");
}catch (IOException e) {
System.out.println("Error en el cliente");
}
}
public void leer(){
try {
String line;
while(true){
line = entradaControl.readLine();
if(line != null)
System.out.println(line);
else
break;
}
} catch (IOException e) {
System.out.println("Se agoto el tiempo de espera de lectura.");
} //Aquí se queda esperando que le llegue algo para leer
}
public static void main(String[] args) {
new Cliente().run();
}
}
Esta forma sería valida no? Es decir, funcionar funciona porque lo miré, pero será muy sucio hacer esto, será un apaño, o sería una forma correcta de hacerlo?
Un saludo.
Marcadores