• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Informe Final Poo
 

Informe Final Poo

on

  • 2,196 views

 

Statistics

Views

Total Views
2,196
Views on SlideShare
2,196
Embed Views
0

Actions

Likes
0
Downloads
63
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Informe Final Poo Informe Final Poo Document Transcript

    • Escuela Politécnica Nacional Programación Orientada a Objetos Crea un chat en JAVA Tema: Servicio de mensajería tipo chat desarrollado en Java y utilizando NetBeans Objetivos: • Crear un servidor para un servicio de mensajería tipo chat utilizando el lenguaje de programación Java y desarrollado mediante la plataforma NetBeans que permita la conexión entre dos o más computadores o clientes chat. • Desarrollar mediante una interfaz gráfica un cliente de mensajería tipo chat con el cual los usuarios puedan interactuar no solo con strings, sino también con objetos, imágenes, colores, emoticones etc., conectados mediante el servidor previamente desarrollado. • Añadir la aplicación de Java que nos permita almacenar las conversaciones o los contactos de los usuarios. Integrantes: • Carlos Santamaría • Ángel López DESARROLLO TEÓRICO Introducción: QUE ES UN CHAT (IRC) En Internet, la gran "mediateca" global, se puede hacer casi de todo y uno de los servicios que ofrece Internet es el IRC (Internet Relay Chat). A través del IRC, se puede charlar con otros usuarios que en ese momento también estén conectados a la red, no importa en qué parte del mundo. Además se nos ofrece la posibilidad de entablar conversación con cientos o miles de usuarios simultáneamente. En realidad, el IRC está basado en el TALK, un programa para Unix que permite la conexión con un ordenador remoto para mantener una charla interactiva con su operador, de manera que todo lo que se escribe a través del teclado lo recibe la otra persona en su monitor y viceversa. El IRC es pues algo parecido, aunque mucho más evolucionado. Carlos Santamaría 2010 Ángel López
    • Escuela Politécnica Nacional Programación Orientada a Objetos Crea un chat en JAVA COMANDOS BÁSICOS DE IRC Los comandos que se van a describir ahora son los más elementales que debe conocer un usuario para participar en las conversaciones. Estos comandos son enviados por el cliente al servidor, quien se encarga de reaccionar de forma adecuada ante ellos. • /HELP: permite obtener ayuda. • /JOIN &nombre_canal, /CHANNEL &nombre_canal: introduce al usuario en el canal especificado. Si este canal no existe, se crea (la gestión dinámica de canales es otra de las posibilidades del IRC), y además confiere al usuario el privilegio de ser el operador del canal. • /WHO nombre_canal: muestra una lista de los usuarios del IRC. Si se indica un nombre de canal, restringe el listado a las personas que están presentes en ese canal. • /WHOIS nick: muestra más información sobre un usuario del que conocemos su nick. Sin embargo, por las razones ya comentadas, la información no suele ser cierta. • /TOPIC cadena: cambia el topic o descripción del canal (si tenemos privilegios para poder hacerlo). • /NICK nuevo_nick: permite cambiar nuestro nick o apodo. • /MSG nick mensaje: envía un mensaje personal a un usuario determinado, sin que los demás usuarios lo vean en su pantalla. • /SIGNOFF, /SI, /BYE, /EXIT, /QUIT: cualquiera de ellos sirve para abandonar la conversación. Si se añade un texto detrás del comando, será enviado como mensaje de despedida. • /USERS: muestra una lista de todos los usuarios conectados al servidor. • /AWAY: se utiliza para anunciar que, sin abandonar el servidor, vamos a estar unos minutos sin atender a la conversación. • /QUERY nick: invita al usuario indicado a participar en una conversación privada. Si el receptor responde con un comando similar, el diálogo particular dará comienzo. Los siguientes comandos los utilizan exclusivamente los operadores: • /OPER nick password: da al usuario indicado los privilegios de operador (si la contraseña es válida). • /KICK nick: expulsa al usuario indicado del servidor. • /QUOTE comando: permite enviar comandos al servidor. Se puede utilizar para matar el demonio o realizar operaciones privilegiadas. ATAQUES EN EL IRC Como veremos más adelante, tanto el demonio de IRC como el bot de gestión de los canales dedican una parte importante de su funcionalidad a impedir la entrada de algunos usuarios en las redes de IRC. ? Por qué es tan importante poder hacer esto? Carlos Santamaría 2010 Ángel López
    • Escuela Politécnica Nacional Programación Orientada a Objetos Crea un chat en JAVA La razón es que existen usuarios con grandes conocimientos sobre el IRC, y que muestran una actitud beligerante respecto a las más desprevenidos, los usuarios noveles. Aprovechándose de las grietas del sistema, son capaces de expulsar a otros usuarios e incluso colgar máquinas remotas, mediante diversos tipos de estrategias: • Flood: consiste en requerir mucha información de un usuario de manera continua (mediante version, whois, ping, dcc, etc.), con el objeto de que la máquina atacada devuelva todas las peticiones, llegando a poner en peligro de saturación al servidor, que procederá a expulsarla. • Floodnets: son grupos de usuarios coordinados mediante scripts, que consiguen hacer el trabajo de flood más efectivo. • Botnets: se trata de una versión automatizada (mediante scripts) del flood. • ICMP: este tipo de ataques son mucho más sofisticados y malignos. Como dato, baste decir que existe un script escrito en sólo cinco líneas de perl y capaz de bloquear una máquina Windows remota. • Smurf: consiste en enviar un ping a la dirección broadcast de una gran red, con la identidad de el remitente falseada para que apunte a la persona atacada. Las respuestas de las máquinas de la red irán directamente a esta persona, rompiéndole la conexión. HISTORIA DE LOS CHAT´S Los inicios del IRC se remontan a 1988, cuando un finlandés llamado Jarkko Oikarinen5 escribió el código original. Fue por tanto en Finlandia donde se comenzó a usar esta tecnología, aunque en ese momento todavía no estaba en Internet, sino que J. Oikarinen la diseñó para usarla en su propia BBS6 como un sistema multichat en tiempo real. VENTAJAS DE UN SISTEMA MULTICHAT Hoy en día la principal ventaja del multichat es recibir mensajes sin conexión. Tan pronto como usted entra, usted recibirá todos los mensajes que se enviaron a usted cuando usted se fuera de línea. ¿Quieres hablar con un compañero, pero él acaba de ir fuera de línea? Sólo tienes que enviar un mensaje fuera de línea directamente desde tu móvil. eBuddy Mobile Messenger es compatible con mensajería fuera de línea. Carlos Santamaría 2010 Ángel López
    • Escuela Politécnica Nacional Programación Orientada a Objetos Crea un chat en JAVA FORMATO DE UN CHAT EN JAVA Cuando comenzó a usar Internet como medio, el sistema comenzó a popularizarse rápidamente y pasó a convertirse en una herramienta de comunicación casi indispensable para todos aquellos que necesitaban comunicarse de una manera más directa que con el correo electrónico. Hay dos fechas clave que marcaron el impulso definitivo del IRC. La primera es 1991, con el estallido de La Guerra del Golfo; el uso de este sistema de comunicación que plasmaba la realidad segundo a segundo comenzó a tomarse en serio. Fue en este momento cuando comenzaron a florecer los programas de IRC. La otra fecha es Septiembre de 1993, cuando gran número de usuarios (en tiempo real) informaban desde Moscú de la inestabilidad social y política por la que estaba pasando el país. Actualmente, los canales de conversación del IRC abarcan todos los temas imaginables, pudiendo encontrar canales en los que se habla de los temas más simples, hasta canales en donde los temas de conversación son absolutamente serios y de gran acervo cultural. Carlos Santamaría 2010 Ángel López
    • Escuela Politécnica Nacional Programación Orientada a Objetos Crea un chat en JAVA Actualmente, las redes más grandes de servidores de IRC son: Efnet7, DALnet8, UnderNet9, NewNet10 y GalaxyNet11 ELEMENTOS DE UN CHAT Dentro de los elementos que encontramos dentro de un Chat para que se pueda llevar a cabo la comunicación, están los siguientes Usuarios. Serán las personas que harán uso del Chat. Canales. Donde los usuarios podrán entrar y salir, aunque en algunas se deban cumplir ciertos requisitos. Chat Room Salas de Charla. Donde todos los usuarios "hablan" entre ellos OPERS. Donde el/los usuario/s solicitan canales o cualquier tipo de información. ADM (Administradores). Estos son los que marcan las pautas y normas a seguir para el buen funcionamiento del Chat y la conducta de los usuarios. IrCOP. Serán las personas que se dedican al mantenimiento del Chat. OPER. Son las personas que ante las necesidades de los usuarios, les ayudan o suministran cualquier tipo de información respecto, comunicaciones entre canales, entre usuarios, reservas de canales privados, etc. CARACTERÍSTICAS DE LOS CHAT´S La tecnología de la CMC hace posible que un grupo de personas distantes físicamente, sin la posibilidad de verse el uno al otro puedan comunicarse de manera sincrónica, al igual que en los encuentros cara a cara, usando la palabra escrita. En esta forma de comunicación se combinan la permanencia de la palabra escrita y la fluidez del intercambio propia de las conversaciones presénciales. Dentro de las características principales podemos mencionar: Abierto las 24 horas del día todos los días. Internet y la totalidad de sus aplicaciones están disponibles las 24 horas del día todos los días. Sólo un par de clicks separan a la persona del acceso al mundo virtual si cuenta con el software12 y el hardware13 necesarios. Una vez ingresado (conectado) a la red, siempre habrá personas esperando alguien con quien conversar. Puede plantearse la posibilidad de que la persona frecuente un mismo chat room y que en éste, a las 7 de la mañana, no haya usuarios. Este pequeño problema se soluciona fácilmente: se puede entrar a Carlos Santamaría 2010 Ángel López
    • Escuela Politécnica Nacional Programación Orientada a Objetos Crea un chat en JAVA otros canales de otros países (por ejemplo, al de España, que remite a un lugar del mundo donde son las 11 de la mañana y probablemente haya más usuarios en línea). Control sobre la presentación de uno mismo y sobre lo que los otros ven del sí mismo. En IRC, el anonimato, facilita la creación de un personaje. Las máscaras esconden a la persona y permiten jugar un personaje cuyas características son fácilmente configuradas por la propia persona. Control sobre la relación. Los programas de IRC ofrecen la posibilidad de elegir con quien hablar y con quién no. Es decir, que si al sujeto no le interesa comunicarse con una determinada persona, con sólo tipiar un comando (/ignore) seguido por, por ejemplo, el nickname de ésta, logra su objetivo. } TIPOS DE CHAT Los hay de todo tipo, desde el que solo admite texto sobre un fondo liso (la versión primera del MIRC, hasta el que combina también voz e imagen junto con la posibilidad de compartir archivos, dibujar en una misma pizarra, etc. Poco a poco, los chat´s se están quedando anticuados y en muy poco tiempo nos encontraremos con chats en 3D (ya existen algunos) acompañados de videoconferencia. Desarrollo del proyecto Utilización de sockets Sockets: Son un sistema de comunicación entre procesos de diferentes máquinas de una red. Más exactamente, un socket es un punto de comunicación por el cual un proceso puede emitir o recibir información. Un socket es un punto final de una comunicación bidireccional entre 2 programasejecutándose en la red. Un socket se asocia a un número de puerto de forma que elprotocolo de la capa de transporte (en nuestro caso TCP) pueda identificar la aplicación a laque están destinados los datos. Así, los sockets permiten crear la ilusión al programador deque mandar/recibir datos por la red es algo similar a escribir/leer datos de un disco. El servidor corre sobre una máquina y tiene un socket asociado a un puerto determinado, porel que está esperando la petición de una conexión de un cliente. El cliente conoce el nombre de la máquina donde se está ejecutando el servidor y el número de puerto por el que está escuchando el servidor. DIAGRAMA Carlos Santamaría 2010 Ángel López
    • Escuela Politécnica Nacional Programación Orientada a Objetos Crea un chat en JAVA El cliente realiza una petición de conexión al servidor con el nombre de máquina del servidor y el puerto. Si no se produce ningún error el servidor acepta la conexión. Crea un nuevo socket para atender la petición de ese cliente y mantiene el socket original que está escuchando para atender peticiones de nuevos clientes. A partir de este momento el cliente y el servidor pueden comunicarse leyendo o escribiendo en sus sockets. La clase Socket implementa un lado de la conexión bidireccional entre dos aplicaciones Java en la red. Permite crear conexiones de clientes con servidores. La clase Server Socket implementa el otro lado de la conexión bidireccional. En concreto permite crear un socket que puede escuchar en un puerto y aceptar conexiones de clientes. Ambas son implementaciones que ocultan los detalles de las plataformas concretas (hardware y sistema operativo) donde se ejecutan las aplicaciones cliente y servidor. El chat que desarrollamos utiliza sockets, los cuales funcionan bajo una arquitectura cliente servidor, en donde se tiene un servidor y los clientes se conectan a éste y a través de él, se comunican entre sí. La gracia del chat es que hace envió de objetos en vez de simples cadenas de texto, para esto se utiliza la clase ObjectInputStream y ObjectOutputStream, los objetos de estas clases permiten escribir y leer objetos con los métodos writeObject y readObject, ambos reciben como parámetro un objeto. La idea es que todo lo que viaje por la red debe estar serializado, en el caso del chat se utiliza una clase Mensaje, la cual tiene un contenido (avatar, color de la fuente, mensaje en texto, etc.) y cada parte del contenido debe estar serializado a su vez, si alguna cosa no está serializada, entonces la clase que lo contiene no podrá estarlo tampoco. ObjectInputStream Objeto de entrada, cual escribe tipos de datos primitivos y gráficos de objetos Java a un flujo de salida. Los objetos se pueden leer usando un ObjectInputStream. De almacenamiento persistente de objetos se puede realizar mediante un archivo de la secuencia ObjectOutputStream Objeto de salida, el cual escribe tipos de datos primitivos y gráficos de objetos Java a un flujo de salida. Los objetos se pueden leer usando un ObjectInputStream. De almacenamiento persistente de objetos se puede realizar mediante un archivo de la secuencia. Carlos Santamaría 2010 Ángel López
    • Escuela Politécnica Nacional Programación Orientada a Objetos Crea un chat en JAVA Para tener una visión completa del sistema, podemos revisar la arquitectura del chat: Como pueden ver, el cliente consta de dos partes fundamentales, Cliente y Orquestador. Cliente es la parte gráfica, la que el usuario ve y Orquestador es la parte que se conecta con el servidor y maneja la lógica (envía y recibe mensajes). La parte servidor tiene un Servidor que recibe las conexiones y maneja una lista de clientes, la cual está en un objeto de la clase RecursoClientes, la cual utiliza el patrón de diseño Singleton (thread safe). Cuando un cliente se conecta, el Servidor recibe el nickname del Cliente y busca en la lista si ya existe, de ser así impide la conexión y avisa al Cliente, es una regla que implementamos, en caso contrario la conexión se acepta y se delega el trabajo a un thread o hilo ManejadorCliente, el cual se encarga de recibir los mensajes del Cliente y se los pasa a los demás Clientes de la lista, además se encarga de quitarlo de la lista cuando éste se desconecta y avisa a los demás de la desconexión. Carlos Santamaría 2010 Ángel López
    • Escuela Politécnica Nacional Programación Orientada a Objetos Crea un chat en JAVA Diagrama de clases del cliente: Diagrama de clases del servidor. Carlos Santamaría 2010 Ángel López
    • Escuela Politécnica Nacional Programación Orientada a Objetos Crea un chat en JAVA El servidor tiene menos clases por lo que se podría decir que es más sencillo pero al mismo tiempo hay conceptos que son más difíciles de entender como es el patrón de diseño Singleton El cliente es más complejo en el sentido que tiene más clases, pero varias son solo clases para definir algunas cosas gráficas, nada complejo de entender. La clase más importante es Orquestador, que es la que se encarga de toda la lógica y paso de mensajes hacia el cliente (a través de la interfaz OrquestadorInterface) y hacia el servidor es decir otros clientes. Hay que tener en cuenta que lo que se envía por la red son objetos de tipo Mensaje, por lo tanto esa clase debe estar tanto en el cliente como en el servidor. Acá pueden ver el diagrama de secuencia del servidor y del cliente Carlos Santamaría 2010 Ángel López
    • Escuela Politécnica Nacional Programación Orientada a Objetos Crea un chat en JAVA Carlos Santamaría 2010 Ángel López
    • Escuela Politécnica Nacional Programación Orientada a Objetos Crea un chat en JAVA Con esos diagramas es fácil entender el paso de mensajes entre los objetos que conforman el software, tanto en la parte cliente como en el servidor. Por ejemplo se puede ver la secuencia de mensajes desde que un cliente se conecta hasta que se desconecta. La Plataforma NetBeans Es una plataforma que ofrece servicios comunes a las aplicaciones de escritorio, permitiéndole al desarrollador enfocarse en la lógica específica de su aplicación. Entre las características de la plataforma están: • Administración de las interfaces de usuario (ej. menús y barras de herramientas) • Administración de las configuraciones del usuario • Administración del almacenamiento (guardando y cargando cualquier tipo de dato) • Administración de ventanas • Framework basado en asistentes (diálogos paso a paso) NETBEANS IDE El IDE NetBeans es un IDE - una herramienta para programadores pensada para escribir, compilar, depurar y ejecutar programas. Está escrito en Java - pero puede servir para cualquier otro lenguaje de programación. Existe además un número importante de módulos para extender el IDE NetBeans. El IDE NetBeans es un producto libre y gratuito sin restricciones de uso. El NetBeans IDE es un IDE de código abierto escrito completamente en Java usando la plataforma NetBeans. El NetBeans IDE soporta el desarrollo de todos los tipos de aplicación Java (J2SE, web, EJB y aplicaciones móviles). Entre sus características se encuentra un sistema de proyectos basado en Ant, control de versiones y refactoring. Desde Julio de 2006, NetBeans IDE es licenciado bajo la Common Development Una venNetBeans Add-on Packstaja de usar NetBeans 6.0 es que viene con UML integrado y soporta ingeniería inversa (o reversa) por lo que pueden hacer diagramas de cualquier tipo (soportado) desde el código fuente con un simple click derecho en el proyecto -> Reverse Engineer y listo. También pueden generar un nuevo proyecto UML y generar código a partir del diagrama de clases, es decir pueden utilizar UML hacia ambos lados, desde y hacia, lo cual es sumamente interesante y por sobre todo útil Capturas del chat funcionando Carlos Santamaría 2010 Ángel López
    • Escuela Politécnica Nacional Programación Orientada a Objetos Crea un chat en JAVA HERENCIA EN JAVA La idea de la herencia es permitir la creación de nuevas clases basadas en clases existentes. Cuando heredamos de una clase existente, reusamos (o heredamos) métodos y campos, y agregamos nuevos campos y métodos para cumplir con la situación nueva. Cada vez que encontremos la relación "es-un" entre dos clases, estamos ante la presencia de herencia. La clase ya existente es llamada superclass, o clase base, o clase padre. La clase nueva es llamada subclase, clase derivada, o clase hija. A través de la herencia podemos agregar nuevos campos, y podemos agregar o sobre montar métodos . Sobre montar un método es redefinirlo en la case heredada. Jerarquía de Herencia según un chat CODIGO DEL CHAT Tal como funciona nuestra aplicación en este momento para cada Cliente Chat que se conecta a Servidor Chat se crea un objeto de la clase Cliente donde se almacena su Nick (name) y el socket asignado en tiempo de ejecución en la máquina servidor para comunicarsecon la máquina cliente (ClienteChat.java), etc. Modifica el código de ServidorChat.java y de Cliente.java de forma que se cree un thread para cada ClienteChat.java que se conecte a ServidorChat.java. Comprueba que los comandos REGISTER y CLOSE, programados anteriormente, funcionan tal y como se esperaba Estudio del ejemplo de uso de Threads “ Carlos Santamaría 2010 Ángel López
    • Escuela Politécnica Nacional Programación Orientada a Objetos Crea un chat en JAVA Modifica el ejemplo para que muestre por pantalla el nombre del thread que se está ejecutando. Ejecuta el nuevo ejemplo varias veces, analízalo y describe cuándo cada uno de los threads ejecutan código, si aunque no se impriman en la pantalla tienen asignada la CPU, qué imprimen en la pantalla cada thread y si ambos threads finalizan cuando se ejecuta la sentencia System.exit Para que un cliente sea capaz de leer un socket desde teclado concurrentemente y no pueda enviarte un mensaje mientras estás escribiendo tú un nuevo mensaje o poniendo un nuevo comando al servidor nos basamos en el código de Ejemplo.java modifica el código de Cliente Chat.java, para que en el main se cree un objeto Cliente Chat, se creen dos threads de ese objeto, uno de los threads ejecute el método sendCommand() y el otro thread el métodolistenServer() Se encarga de leer comando del usuario y enviarlo a la parte Servidor de nuestra aplicación El método listenServer() leerá continuamente lo que le envía el servidor (Cliente.java) y cuando el servidor envíe el mensaje de despedida (“Bye Bye …”) cerrará el socket y la aplicación de ClienteChat.java. El comando siguiente envía un mensaje a todos los usuarios conectados en este momento al chat. El mensaje no debe empezar ni por el carácter del comando SEND_CLIENT_LIST (‘:’), ni por el REGISTER (‘[’), ni por el CLOSE (‘]’), ni por el PRIVADO (‘/’, reservado para un futuro comando) Este mensaje aparece en cada una de las pantallas de los usuarios conectados y la pantalla del usuario conectado muestra: nickOrigen: mensaje /nickDestino mensaje Modifica el código de ServidorChat.java, Cliente.java y de ClienteChat.java para que soporte estos nuevos comandos. CONCLUSIONES Y RECOMENDACIONES Se recomienda que: • Se use SocketChannel de java.nio ya que el problema con la arquitectura utilizada es que mientras más clientes se conecten, más recursos del servidor se utilizarán, ya que por cada cliente se crea un nuevo hilo (Thread). Una solución es NO usar Threads ni Sockets, sino usar SocketChannel de java.nio,el cual es más difícil de utilizar y entender, pero vale la pena ya que la baja en la utilización de recursos es altísima, además de una mejora sustancial en la eficiencia y rapidez de respuesta en el servidor. • Después de haber analizado las características propias del lenguaje Java, podemos concluir que hasta el momento, es un software de programación en el que podemos confiar al diseñar nuestras paginas web, esto es, por su gran versatilidad, facilidad de programación y seguridad. Carlos Santamaría 2010 Ángel López
    • Escuela Politécnica Nacional Programación Orientada a Objetos Crea un chat en JAVA • Los Chat´s en nuestra época están dando un gran giro comercial, ya que no solo se utiliza para intercomunicar a un grupo de gente, sino que también, para establecer una relación Cliente- Vendedor. • Actualmente muchas de las grandes empresas ya utilizan los Chat´s para la comunicación con sus clientes, ya que por medio de ellos pueden, cotizar, hacer pedidos de productos, verificar existencias en tiempo real y hasta tener una entrevista "cara a cara" (por medio de videoconferencia). Este tipo de comunicación se puede decir que es mas personalizado que la vía telefónica. Anexos • Más detalles y un video de funcionamiento en http://creaunchatenjava.blogspot.com Carlos Santamaría 2010 Ángel López