
|
Implementación del buffer tipo LIFO (La pila, último en llegar es primero en salir)Modifiquemos el ejemplo anterior para que ahora sean una bibliotecaria y su asistente, la bibliotecaria recibirá libros nuevos para catalogar y los enviará a apilar en el escritorio de la asistente, la asistente tendrá un minuto para leer el nombre de la etiqueta que envió la bibliotecaria a través de la red y ordenarlo, es visto que los libros ahora saldrán en forma de pila y no cola de espera, el límite será la altura de la asistente que hace las tarjetas sentada, pero no lo calcularemos :p. Libros en total 24, se envía el contenido de la tarjeta en modo texto. Asistente: gus@gusgus ~$ java com.compunauta.aprendiendojava.Cap3_lifo_asis Escuchando el puerto:4567 Esperando conexión... Conectado... Esperando títulos Libro:Introducción a la física No hay más, nos vamos cuando terminemos... Libro:Aprendiendo Java Libro:Lectura I Libro:Asambleas Ya no es necesario esperar, terminado... gus@gusgus ~$ Bibliotecaria: gus@gusgus ~$ java com.compunauta.aprendiendojava.Cap3_lifo_bib Intentando conectar con la asistente Nos conectamos con la asistente:127.0.0.1:4567 Ingrese Títulos (línea vacía termina) Introducción a la física Asambleas Lectura I Aprendiendo Java Programa terminado gus@gusgus ~$ Asistente:
Descripción del funcionamiento: La declaración de variables globales a la clase o tipo de datos se realiza entre las líneas 15 y 19. El método principal comienza en la línea 21, y declaramos los objetos del tipo Socket y ServerSocket como en el apartado anterior. Desde la línea 28 a la 32 intentamos abrir el puerto para escuchar conexiones entrantes, si sucede un error nos salimos. Si no hay errores, entre la línea 35 y 38 esperamos una conexión entrante con su respectivo bloque de control de errores. Como la función accept();detendrá el programa hasta que arribe una conexión, si estamos ejecutando el bloque principal entre las líneas 43 y siguientes, es porque se recibió una conexión. En el respectivo bloque de control de errores iniciamos el flujo de datos que usaremos para ir recibiendo renglones, en este caso usamos el mismo tipo de objeto que nos permite leer líneas desde el teclado, solo que ahora las leeremos desde la conexión de red. Declaramos algunas cuantas variables para crear nuestro temporizador de 1 minuto igual que en el ejemplo anterior, y definimos una variable ultimo que nos avisará cuando los libros son todos. En este caso la bandera que usamos para saber que hemos terminado por parte de la bibliotecaria es la palabra clave “fin”, y por supuesto revisamos que la conexión no esté cerrada, que haya elementos y todo eso antes de proceder a retirar un libro del buffer y enseñarlo en pantalla. La bandera binaria ultimo solo se activará en la condición anterior para asegurar que seguiremos mostrando títulos mientras, es una variación respecto del ejemplo anterior para ver otras maneras de resolver algo similar. Si, el ultimo elemento ya llegó y no hay más en la memoria temporal, entonces nos salimos del programa. (líneas 56-58). Si no es el ultimo elemento y hay datos disponibles en el flujo de datos de red, entonces leer una línea y ponerla en la memoria temporal. Si el timer está encendido entonces procedemos igual que antes, el único cambio sustancial serán las funciones que guardan y extraen los datos del buffer. La única función que cambia es la que quita elementos del buffer, que es mucho más simple que antes. return buffer[--buff_elem]; Donde estamos decrementando el contador de elementos antes (el -- está a la izquierda) y como sabemos que los arreglos se acceden desde el 0 a cantidad-1 entonces es correcto el resultado devuelto. leavecomment |
|
|||||||||||||||||||||||
*Hasta que esta leyenda no desaparezca el libro no ha sido terminado, descarge en pdf:
http://compunauta.com/forums/linux/programacion/java/ebook.html