Universidad Nacional de Trujillo
Facultad de Ciencias Fsicas y Matemticas Escuela de Informtica
Contenido
I.
II.
III.
IV.
RESUMEN INTRODUCCION 1. PROBLEMA 2. OBJETIVOS FUNDAMENTO TERICO 1. SOCKETS 2. TCP 3. SERVIDOR 4. CLIENTE ESTRUCTURA 1. NIVELES DE CAPA 2. CARACTERSTICAS DEL SOFTWARE FUNCIONAMIENTO DE SOCKETSIMPLEMENTACION
Resumen
El presente trabajo es para el curso de teleprocesamiento, se trata de un juego muy popular para nios y adultos denominado por nuestro grupo de trabajo como GUTXI PUZZLE. El juego consiste en armar una figura dada el estado inicial con 9 piezas iguales, donde el problema es la gran cantidad de movimientos que hay que hacer con cada pieza para poder llegar al estado final que en este caso sera la figura a formar. El proyecto quedo al final definido por un conjunto de 9 piezas todas de las mismas dimensiones identificadas por un nmero que es lo que las diferencia. Acompaando a estas piezas diseamos una pieza en blanco o de color formando de esta manera una matriz de 3x3. Asimismo, ste juego ha sido diseado en dos modalidades: individual (cliente - PC) y grupal (utilizando la conexin cliente servidor). Finalmente, hoy en da, el PUZZLE se usa como entretenimiento, en psicologa, en educacin fsica, en diseo, en filosofa y particularmente en pedagoga, promoviendo el desarrollo de capacidades psicomotrices e intelectuales de los nios y adultos.
I.
INTRODUCCION
Miles y miles de personas de todas las edades, nivel cultural y socioeconmico se encuentran a diario en Internet para jugar. En poco tiempo, los ttulos en lnea se han multiplicado, los ciberlocales se han proliferado como una epidemia, cada vez existen en la Red ms servidores dedicados a juegos. Definitivamente, algo est cambiando en el mundo de los juegos en red. Es como otro eslabn. Ya no se trata de enfrentarse a la mquina, sino que se interacta directamente con personas, con su inteligencia, habilidad, agilidad mental, y su suerte. Algunos juegos exigen estrategias compartidas, la creacin de reglas sociales por parte de los jugadores, de comunidades virtuales o clanes que se enfrentan entre ellos. Entonces aparece otro mundo paralelo, con sus propias leyes y lenguaje. En este proyecto se presenta una aplicacin de la teora de Teleprocesamiento para lograr la interaccin de dos personas a travs de un juego diseado y realizado en un software de aplicacin como es el Netbeants, el cual ofrece un entorno de desarrollo integrado, adems dispone de una herramienta GUIDE que es un editor de interfaces de usuario GUI, otras de las funcionalidades que tiene este software es la capacidad de poder compilar y ejecutar cdigo escrito en Java. Para la conexin entre dos computadoras se utiliz la teora de Sockets en Java, usando el protocolo TCP/IP.
1.1.
El Problema El problema de nuestro proyecto parte por definir el nmero y forma de piezas a utilizar. Luego cabe definir el estado inicial de las piezas, y un estado final al que se quiere llegar. El problema en si parte en este punto, en donde se tiene que ver la manera optima de llegar del estado inicial al final, analizando los movimientos de cada piezas en el menor tiempo.
Cabe resaltar que la figura que se quiere formar ya est definido en el lado derecho de la interfaz, y no es cualquier estado que el usuario pueda determinar. 1.2. Objetivos: El objetivo general es: Aplicar los conocimientos adquiridos a lo largo del desarrollo del curso de Teleprocesamiento para realizar la conexin cliente servidor.
Los objetivos especficos son: Lograr la comunicacin entre dos personas, usando la conexcion de sockets???????? Encontrar diversos caminos para que llegar a formar la figura final. Encontrar una representacin acorde con la solucin en base a lo enseado en el curso.
V.
FUNDAMENTO TEORICO:
El presente proyecto fue desarrollado con la finalidad de poner en prctica los conocimientos tericos adquiridos en este curso. Desde antes de la creacin de las computadoras el ser humano ha intentado comunicarse de una forma cada vez ms simple y a largas distancias. Una forma de comunicacin rpida en la actualidad es el uso de redes de computadoras con lo que nace el trmino de Teleproceso. La palabra Teleproceso es derivado de "Telecomunicacin en Proceso de Datos" (1967). En la dcada de los 80 se comienza a dar gran auge al Teleproceso. Se comienza con el telfono, pese que no estaba diseado para este fin, pero se adecu. Se tomaron en cuenta algunos conceptos adicionales como los que presentamos a continuacin: 1. Socket: Es un mtodo para la comunicacin entre un programa del cliente y un programa del servidor en una red. Un socket se define como el punto final en una conexin. Los sockets se crean y se utilizan con un sistema de peticiones o de llamadas de funcin a veces llamados interfaz de programacin de aplicacin de sockets (API, application programming interface). 2. TCP es un protocolo orientado a conexin. No hay relaciones maestro/esclavo. Las aplicaciones, sin embargo, utilizan un modelo cliente/servidor en las comunicaciones.
3. Servidor es una aplicacin que ofrece un servicio a uno o ms Clientes. 4. Cliente es el que pide ese servicio. La aplicacin puede ser utilizada de dos maneras, en la primera, el usuario puede jugar personalmente, la otra forma seria utilizar la conexin cliente- servidor, que se pueden ejecutar ya sea en una misma computadora o en dos. Los usuarios invocan la parte cliente de la aplicacin, que construye una solicitud para ese servicio y se la enva al servidor de la aplicacin que usa TCP/IP como transporte. El servidor es un programa que recibe una solicitud, realiza el servicio requerido y devuelve los resultados en forma de una respuesta. VI. Estructura:
1. Niveles de Capas
El modelo de referencia OSI, las capas de este modelo describen el proceso de transmisin de los datos dentro de una red. (Ver Fig. 1)
Fig. 1: Las siete capas del Modelos OSI
1.1 Nivel Fsico: Los elementos utilizados en este nivel son los siguientes: 2 Tarjetas de red para utilizarlas en las PCs
1 Cable par trenzado de cobre para la conexin punto a punto. Conectores RJ-45 para conectar el cable a las PCs. 1.2 Nivel Enlace: Ambos, cliente y servidor, reciben bloques de informacin, los cuales son evaluados en los mtodos Obtenerflujos y procesarConexion para la deteccin de errores en la conexin. 1.3 Nivel Red Se Identifica a la otra PC a travs de su direccin IP. La ruta de conexin se dar a travs de las tarjetas de red de las pcs por medio del cable par trenzado. 1.4 Nivel Transporte Se encarga del transporte de la informacin, desde el servidor al cliente o viceversa, a travs de la conexin punto a punto de las pcs. Los accesos a la capa de transporte se efectan a travs de puertos (sockets). EL objetivo es realizar un servicio de transporte eficiente entre procesos o usuarios finales. Para dicho fin, toma los mensajes del nivel de sesin, los distribuye en pequeas unidades (Segmentos) y los pasa a la red. 1.5 Nivel Sesin Cuando se realiza una transferencia entre las dos pcs se establece una sesin de comunicaciones entre ambos. Este nivel de sesin es responsable de: Establecer un dialogo entre dos equipos remotos para controlar la forma en que se intercambian los datos. 1.6 Nivel Presentacin Trata de homogenizar los formatos de representacin de los datos entre los equipos. Para homogenizar la representacin de datos (imgenes, valores numricos, instrucciones), el nivel de presentacin interpreta las estructuras de las informaciones intercambiadas por los procesos de la aplicacin y las transforma convenientemente. 1.7 Nivel Aplicacin En este nivel se muestra la lgica del juego, la cual consiste en: o Para que un usuario pueda acceder al juego necesita ingresar su nombre y elegir el tipo de juego (individual o de dos). Para jugar de dos es necesario realizar la conexin con el servidor. o Una vez realizada la conexin entre cliente y servidor, el servidor lanza la imagen, con la intencin de iniciar el juego para armar las piezas. o Se abre la ventana del juego y el tiempo empieza a correr. El servidor tiene un control de los movimientos y tiempo que
cada jugador. Gana el que termine de armar las piezas en el menor tiempo posible.
2. CARACTERISTICAS DEL SOFTWARE: El software ha sido desarrollado bajo el modelo de programacin orientada a objetos a travs del uso de Java y Netbeans. 2.1 Paquetes Para la elaboracin del programa se distribuyeron las diferentes clases utilizadas en paquetes, cada uno de stos cumple con una funcin especfica. Adicionalmente a esto fue creada una carpeta donde se colocaron las imgenes necesarias para la visualizacin del Puzzle. El paquete prueba contiene las clases que forman parte de la interfaz grafica del programa, como Panel_Juego y Nuevo, usados durante la elaboracin de la aplicacin. Panel_Juego es la clase que gestionan el algoritmo de nuestro juego, ah se encuentran todos los mtodos a ejecutarse. Uno de ellos es la colocacin aleatoria de las imgenes y el movimiento de las figuras. Mientras que la clase Nuevo realiza el anlisis del juego incluyendo la conexin de sockets, para optimizar la aplicacin en las dos modalidades: individual y cliente vs. Cliente. A continuacin se esquematizar la distribucin de los archivos.
Prueba.jar Prueba Nuevo.java Panel_Juego.java Principal.java Images.Linux 1.png 2.png
3.png Imagen.jpg Principal.java
La clase principal.java se encuentra un archivo que indica la maquina virtual de Java cual es el archivo que contiene el mtodo main, en esta aplicacin se encuentra en el mtodo Main.class.
El paquete Imgenes va estar formado por las imgenes: Abrir, Ayuda y No hay que se utilizaran en la barra de men de la pantalla. Los paquetes Images.Linux, Images.Sakura, Images.Simpson, Images.Pitufos e Images.Lunytoons contienen las imgenes que se mostraran en el Puzzle. El paquete Servidor, contienen las clases que crearan el socket de conexin con el cliente; la clase servidor.class est formada por varios mtodos siendo el principal runsever; este mtodo crea dos sockets uno para la comunicacin y otro para el envo de la trama. Para ejecutar los sockets utilizaremos hilos en java. El paquete cliente, contiene la clase cliente.class el que ha su vez tiene 3 metodos: conexin crea la conexin con el socket utilizando hilos cliente que se conectara al servidor mediante el IP. El mtodo flujo permite la salida de los datos hacia el servidor.
Clases, atributos y mtodos. Clase Panel_Juego Clase Abstracta Panel_Juego (extiende de JLabel)
Atributos private Nuevo Nuevo_Juego private int contador private Thread crono private int horas=0, minutos=0, segundos=0 public LinkedList<JButton> botones = new LinkedList<JButton>() Mtodos public Panel_Juego() public void revolver() void cambiar(int a, int b) private void NuevoActionPerformed private void Boton6ActionPerformed () private void Boton0ActionPerformed() private void Boton8ActionPerformed() private void Boton3ActionPerformed() private void Boton1ActionPerformed() private void Boton5ActionPerformed() private void Boton4ActionPerformed() private void Boton2ActionPerformed() private void Boton7ActionPerformed() private void Nuevo1ActionPerformed() private void verificar() public void run() Adhiere los botones a una lista enlazada para poder utilizarlos con un for Devuelve las imgenes en un orden aleatorio Funcin que utiliza dos parmetros de los cuales te permitir cambiar de posicin. Permite mostrar la pantalla de inicio par un nuevo juego. Cambiar con el botn adyacente que no tiene imagen Cambiar con el botn adyacente que no tiene imagen Cambiar con el botn adyacente que no tiene imagen Cambiar con el botn adyacente que no tiene imagen Cambiar con el botn adyacente que no tiene imagen Cambiar con el botn adyacente que no tiene imagen Cambiar con el botn adyacente que no tiene imagen Cambiar con el botn adyacente que no tiene imagen Cambiar con el botn adyacente que no tiene imagen Cambiar con el botn adyacente que no tiene imagen Mtodo que verifica si el puzle se encuentra armado Mtodo para calcular el tiempo del cronometro. Inicializa un nuevo juego pidiendo el nombre y un host. Contiene el numero de movimientos que se realiza por cada intercambio Crea una variable tipo hilo para el cronometro Contiene la hora, minutos y segundos del cronometro Contiene en una lista enlazada todos los botones de las imgenes.
Clase Nuevo:
Clase Abstracta Nuevo (extiende de JLabel)
Atributos private Panel_Juego Juego Mtodos public Nuevo() private void N_JugadoresItemStateChanged() private void ImagenItemStateChanged() private void CancelarActionPerformed() private void CerrarActionPerformed() private void AceptarActionPerformed() private void ImagenActionPerformed () private void inicializar_Juego () Contiene el panel de juego
Inicializa los componentes Devuelve las imgenes en un orden aleatorio Funcin que utiliza dos parmetros de los cuales te permitir cambiar de posicin. Elimina los datos ingresado para volver a ingresarlos Cierra la ventana del juego Enviando los datos al servidor para iniciar el juego Construye la barra de men Enva el nombre y la imagen al servidor para inicializar el juego
3. FUNCIONAMIENTO DE SOCKETS El punto ms importante de este proyecto fue entender el Modelo de comunicacin Cliente Servidor con sockets en Java. (Ver Fig. 2).Para luego pasar a desarrollar la lgica del juego.
Fig.2: Modelos de comunicacin Cliente Servidor con sockets en Java
Una vez entendido dicho modelo se implement el algoritmo y se hicieron dos programas diferentes, tanto para el Servidor, as como para el Cliente, donde el Servidor tiene un socket que est ligado a un nmero de puerto especfico, y este se pone en espera por un cliente que haga la peticin de conexin. En el lado del Cliente, este debe de saber el nombre del host de la maquina (IP) en el cual el Servidor est corriendo y el puerto por el cual est escuchando. La forma como est estructurado la lgica del juego, es la siguiente: o En el lado del Servidor, este tendr los campos predeterminados para su identificacin (host y puerto), adems tendr que escoger aleatoriamente la imagen con la cual se jugar; teniendo estos datos el Servidor se pondr en escucha, a la espera de los clientes se conecten. o En el lado del Cliente, este tendr que llenar los campos predeterminados para su identificacin (Nombre, puerto y host); para que el Cliente pueda conectarse con el Servidor, este deber saber el host del Servidor y adems el puerto por donde est escuchando, teniendo estos datos el Cliente se conecta, en ese momento se le enva desde el Servidor la Trama N1 que consiste en el Nombre del contrincante y la imagen seleccionada, y se le propone jugar con dicha imagen. o Ahora tanto el Cliente como el Servidor tienen informacin de su oponente, teniendo estos datos se inicia el juego; para que el juego tenga un cierto grado de complejidad se tomo en cuenta el tiempo, este factor permitir que se logre elegir con mayor facilidad a un ganador. o Luego el Servidor se pone nuevamente en escucha, en el lado del Cliente, este empieza a jugar con la imagen propuesta, este le enviar al Servidor la Trama N2 que consiste en el tiempo que demoro en armar la imagen. o El Servidor recibe internamente el tiempo correspondiente y luego se compara el tiempo obtenido por cada uno de ellos y se muestra un mensaje que indica si gan, perdi o hubo empate.
VII.
IMPLEMENTACIN:
El juego requera de una interfaz amigable y agradable para el usuario, un interfaz que sea intuitivo, por este motivo se disearon cada uno de los interfaces de forma cuidadosa. Como pantalla inicial se disearon los interfaces tanto para el Cliente y el Servidor (Ver Fig. 3)
El Cliente se tiene la interfaz que se muestra en la Fig. 5, cada uno de los campos predeterminados debern de ser llenados de forma secuencial como se muestra en el diagrama.
package Cliente; //paquete cliente
Importamos las libreias que usaremos en el paquete Cliente:
import java.io.*; import java.net.*; import javax.swing.JOptionPane;
En la siguiente porcin de cdigo declaramos los atributos de la clase Cliente.class
public class Cliente { //para almacenas el ip declaramos una variable tipo cadena public static String IP_SERVER; Enviar Ventana_Enviar; //para realizar el flujo de datos con el servidor declaramos variables de entrada y salida DataInputStream entrada = null; DataOutputStream salida = null; DataInputStream entrada2 = null; // variables que usaremos para con conexion con el servidor Socket comunication = null; Socket comunication2 = null; //variable donde almacenaremos el nombre del cliente. String Nombre_Cliente; public Cliente(Enviar Ventana_Enviar) throws IOException { this.Ventana_Enviar = Ventana_Enviar; }
//Para conectarnos con el servidor utilizamos el siguiente cdigo: public void conexion() throws IOException {
try { //creacion de sockets; una para comunicacion y otro para enviar mensajes comunication = new Socket(Cliente.IP_SERVER, 8081); comunication2 = new Socket(Cliente.IP_SERVER, 8082); //Creamos los flujos de datos(entrada y salida) entrada = new DataInputStream(comunication.getInputStream()); salida = new DataOutputStream(comunication.getOutputStream()); entrada2 = new DataInputStream(comunication2.getInputStream()); //codigo que envia trama1= A nombre del clte hacia el servidor Nombre_Cliente = JOptionPane.showInputDialog("Cual es tu Nombre :"); Ventana_Enviar.Nombre.setText(Nombre_Cliente); salida.writeUTF(Nombre_Cliente); } catch (IOException e) { }
//con el mtodo star, empezamos a correr el hilo cliente.
new Hilo_Cliente(entrada2, Ventana_Enviar).start(); } public String getNombre() { return Nombre_Cliente; } public void flujo(String mens) { try { salida.writeInt(1); salida.writeUTF(mens); } catch (IOException ex) {
Conclusin:
Nuestro proyecto es una aplicacin en Java que consiste en armar una figura dada, con un estado inicial de 9 piezas iguales, donde el problema es la gran cantidad de movimientos que hay que hacer con cada pieza para poder llegar al estado final que en este caso sera la figura a formar. Este juego ha sido diseado para testear el conocimiento, habilidad, paciencia o temperamento de una persona en dos modalidades (Individual o grupal). La maquina virtual de java donde fue compilado e interpretado el programa durante las pruebas fue JDK versin 6u20-windows-i586 y realizada en el entorno cliente servidor.
CURIOSIDADES: No se sabe con certeza quin invent el juego ni cundo, pues las primeras publicaciones chinas en las que aparece el siglo XVIII, y entonces el juego era ya muy conocido en varios pases. En China, el Tangram era muy popular y se consideraba juego para mujeres y nios.
A partir del siglo XV, el juego era llamado "el rompecabezas chino" y se volvi tan popular que lo jugaban nios y adultos, personas comunes y personalidades del mundo de las ciencias y las artes; el tangram se haba convertido en una diversin universal. Napolen Bonaparte se convirti en un verdadero especialista en Tangram desde su exilio en la isla de Santa Helena. En cuanto a las figuras que pueden realizarse con el Tangram, la mayor parte de los libros europeos copiaron las figuras chinas originales que eran tan slo unos cientos. Para 1900 se haban inventado nuevas figuras y formas geomtricas y se tenan aproximadamente 900. Los primeros libros sobre el tangram aparecieron en Europa a principios del siglo XIX y presentaban tanto figuras como soluciones. Se conceda ms atencin al juego mismo y sus siete componentes, de forma que el tangram era producido y vendido como un objeto: tarjetas con las siluetas, piezas de marfil y envoltorios en forma de caja, etc. En los libros aparecan unos cuantos cientos de imgenes, en su mayor parte figurativas, como animales, casas y flores, junto a una escasa representacin de formas muy extraas. En 1973, los diseadores holandeses Joost Elffers y Michael Schuyt produjeron una edicin rstica con 750 figuras nuevas, alcanzando as un total de ms de 1.600. La edicin de 1973 ha vendido hasta la fecha ms de un milln de ejemplares en todo el mundo.
Hoy en da, el Tangram se usa como entretenimiento, en psicologa, en educacin fsica, en diseo, en filosofa y particularmente en pedagoga. En el rea de enseanza de las matemticas el Tangram se emplea para introducir conceptos de geometra plana, y para promover el desarrollo de capacidades psicomotrices e intelectuales de los nios, pues permite ligar de manera ldica la manipulacin concreta de materiales con la formacin de ideas abstractas.