Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Ctesias en 3 Abril 2005, 23:21 pm



Título: sockets bloqueados + java
Publicado por: Ctesias en 3 Abril 2005, 23:21 pm
Alguien me podria guiar para encontrar informacion de sockets bloqueados , que son,etc...para java
 y en espanyol .utilizo el netbeans de windows
He buscado en google y no encuetro nada que me sirva


Título: Re: sockets bloqueados + java
Publicado por: AnKeR en 5 Abril 2005, 03:57 am
Buenas:


El tema de los sockets bloqueados o sockets que se bloquean bajo alguna circunstancia es una cosa curiosa :P

Se trata de sockets que bajo una condicion se bloquean (osease el hilo en el que están se suspende hasta que se pase esa condición), vale, y cuales son esas condiciones???? Pues las hay de varios tipos: en C: existen los sockets de escritura bloqueante, mientras el otro extremo del socket, escribe, i porceso se encuentra bloqueado para no encontrar nada anómalo (esto se encuentra en los flags de definición del socket)... creo que tb hay algún otro tipo (asi de memoria no recuerdo :P). En VB.NET existen sockets sincronos y asincronos:  sockets que se bloquean hasta que han recibido toda la información (síncronos), y sockets que no se bloquean y tenemos q ver si nuestro buffer se ha llenado ;) (asincronos).
En java los sockets por naturaleza son NO BLOQUEANTES pero  con una caracteristica curiosa, que como se utilizan con otras cosillas si que se vuelven bloqueantes ;) --ahora me explico--

Código:
try{

      Socket s = new Socket("mihost.es",25);      //Creamos el socket :D
      BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); //Creamos un BufferedReader para leer OJO!!!! FIJAOS LO Q USAMOS
      DataOutputStream dos = new DataOutputStream(s.getOutputStream()); //Un DataOutputStream para leer :P

      dos.writeBytes("Hola\r\n");   //Escribimos al dataoutput sin mais :P
      System.out.println(br.readLine());  //Y leemos con el buffered reader

      dos.writeBytes("QUIT\r\n");

      br.close();     //cerramos y tal
      dos.close();
      s.close();

    }catch(IOException ioe){

      System.err.println("Error: " + ioe);

    }
 

Vale, ahora vemos q leemos con un Buffered reader, pues ahora resulta que el Buffered reader si que es bloqueante se trata de un elemnto sincronizado... por lo tanto lo que antes teniamos como un socket no bloqueante al utilizar un BufferedReader, pos si que es bloqueante... por ejemplo el codigo q he puesto, el programa estará prarado en br.readline() hasta que el otro extremo del socket escriba un salto de linea.

Espero q esto te sirva de algo :P
El IDE que utilices realmente no tiene nada q ver porque son especificaciones del lenguaje ;)

Salu2o3