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

problema con el siguiente codigo java y la funcion available()

Estas en el tema de problema con el siguiente codigo java y la funcion available() en el foro de Java en Foros del Web. Hola a todos. Tengo un problemilla con un programa en java. A ver si alguien me puede aclarar un poco el tema............. La cuestión es ...
  #1 (permalink)  
Antiguo 02/10/2007, 13:39
 
Fecha de Ingreso: marzo-2004
Mensajes: 550
Antigüedad: 20 años, 1 mes
Puntos: 7
Sonrisa problema con el siguiente codigo java y la funcion available()

Hola a todos. Tengo un problemilla con un programa en java. A ver si alguien me puede aclarar un poco el tema.............

La cuestión es que tengo que conectarme a un servidor SSH para posteriormente ejecutar un comando y visualizar su contenido.

Encontre una libreria que implementa la conexion SSH. Hasta aquí todo perfecto. En una parte del programa aparece lo siguiente:

InputStream in=channel.getInputStream();

byte[] tmp=new byte[1024];
while(true){
while(in.available()>0){

int i=in.read(tmp, 0, 1024);
if(i<0)break;
System.out.println(new String(tmp, 0, i));
}



if(channel.isClosed()){
System.out.println("Canal cerrado");
System.out.println("exit-status: "+channel.getExitStatus());
break;
}
try{Thread.sleep(1000);}catch(Exception ee){}
System.out.println("Fin del bucle principal");
}

Sin tener que entender todo el código, lo que hace las instrucciones anteriores es inicialmente comprobar si hay datos que leer (in.available()>0). Si es así entra en el segundo While que se encarga de ir leyendo los datos que le envian hasta que se llegue al final. Entonces se sale del while y digamos que el proceso que enviaba los datos cierra el canal por lo que la comprobación "channel.isClosed()" es cierta y se acaba saliendo del bucle principal y se finaliza el programa.


Aunque no puse todo el código, lo que ha hecho el programa es establecer una conexion SSH con un servidor y ejecutar un comando en dicha máquina. Luego el código que he puesto se encarga de ir leyendo el resultado de dicho comando.


Mis dudas son varias:

En primer lugar no entiendo porque la primera vez que ejecuta la parte de "while(in.available()>0" siempre es falso y da una vuelta al bucle sin hacer nada hasta que la segunda vez toma un valor >0.

Debido a lo anterior, es que si ejecuto un comando que devuelve una sola linea
la primera comprobación "while(in.available()>0" es falsa y no entra en dicho While. Luego comprueba si el canal esta cerrado "if(channel.isClosed())" y no lo está y luego MISTERIOSAMENTE me imprime la salida de dicho comando y luego cuando vuelve al principio del bucle principal y entra otra vez por "while(in.available()>0" sigue siendo falso y luego al comprobar si el canal está cerrado se cumple y finaliza el programa.

En cambio si el resultado que devuelve el comando ocupa varias lineas, en la primera iteración ""while(in.available()>0"" sigue siendo falso pero en el resto de iteraciones es cierto y por tanto ya se puede ejecutar el código "int i=in.read(tmp, 0, 1024);" y luego puedo imprimir el resultado por la pantalla "System.out.println(new String(tmp, 0, i));".

Entonces mi problema está en que quiero almacenar el resultado en una variable por ejemplo o hacer algo con él pero como nose porque ocurre que cuando el resultado es una sola linea se imprime solito por pantalla sin darme lugar a leerlo no puedo tratarlo.

No entiendo porque la función available() siempre resulta falso en la primera iteracion tampoco.


Perdonar por todo el rollo soltado anteriormente. Se que es una pregunta bastante compleja y quizas dificil de responder si no se están en ello pero es que llevo ya varios dias con este tema y estoy empezando a desesperarme



Un saludo a todos y espero q alguien me haga ver la luz......
  #2 (permalink)  
Antiguo 11/08/2009, 03:26
 
Fecha de Ingreso: agosto-2009
Mensajes: 1
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: problema con el siguiente codigo java y la funcion available()

Hola aeb_asturias,

Lo pudiste solucionar? porque a mi también me pasa lo mismo. Llevo ya varios días y no consigo solucionarlo.

Muchas gracias!
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 09:37.