informe final poo

15

Click here to load reader

Upload: carlos-santamaria

Post on 13-Jun-2015

2.231 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Informe Final Poo

Escuela Politécnica Nacional

Programación Orientada a Objetos

Crea un chat en JAVA

Carlos Santamaría 2010Ángel López

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 deprogramación Java y desarrollado mediante la plataforma NetBeans que permitala 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 elcual los usuarios puedan interactuar no solo con strings, sino también con objetos,imágenes, colores, emoticones etc., conectados mediante el servidor previamentedesarrollado.

• Añadir la aplicación de Java que nos permita almacenar las conversaciones o loscontactos 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 queofrece Internet es el IRC (Internet Relay Chat). A través del IRC, se puede charlar con otrosusuarios que en ese momento también estén conectados a la red, no importa en qué parte delmundo. Además se nos ofrece la posibilidad de entablar conversación con cientos o miles deusuarios simultáneamente.

En realidad, el IRC está basado en el TALK, un programa para Unix que permite la conexión con unordenador remoto para mantener una charla interactiva con su operador, de manera que todo loque se escribe a través del teclado lo recibe la otra persona en su monitor y viceversa. El IRC espues algo parecido, aunque mucho más evolucionado.

Page 2: Informe Final Poo

Escuela Politécnica Nacional

Programación Orientada a Objetos

Crea un chat en JAVA

Carlos Santamaría 2010Ángel López

C O M A N D O S B Á S I C O S D E I R C

Los comandos que se van a describir ahora son los más elementales que debe conocer un usuariopara 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 lasposibilidades del IRC), y además confiere al usuario el privilegio de ser el operador delcanal.

• /WHO nombre_canal: muestra una lista de los usuarios del IRC. Si se indica un nombre decanal, 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. Sinembargo, 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 poderhacerlo).

• /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 dedespedida.

• /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ñaes 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 canalesdedican una parte importante de su funcionalidad a impedir la entrada de algunos usuarios en lasredes de IRC. ? Por qué es tan importante poder hacer esto?

Page 3: Informe Final Poo

Escuela Politécnica Nacional

Programación Orientada a Objetos

Crea un chat en JAVA

Carlos Santamaría 2010Ángel López

La razón es que existen usuarios con grandes conocimientos sobre el IRC, y que muestran unaactitud beligerante respecto a las más desprevenidos, los usuarios noveles. Aprovechándose de lasgrietas 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 atacadadevuelva todas las peticiones, llegando a poner en peligro de saturación al servidor, queprocederá a expulsarla.

• Floodnets: son grupos de usuarios coordinados mediante scripts, que consiguen hacer eltrabajo 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 unamáquina Windows remota.

• Smurf: consiste en enviar un ping a la dirección broadcast de una gran red, con laidentidad de el remitente falseada para que apunte a la persona atacada. Las respuestasde 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ó elcódigo original. Fue por tanto en Finlandia donde se comenzó a usar esta tecnología, aunque enese momento todavía no estaba en Internet, sino que J. Oikarinen la diseñó para usarla en supropia 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 comousted entra, usted recibirá todos los mensajes que se enviaron a usted cuando usted se fuera delínea.¿Quieres hablar con un compañero, pero él acaba de ir fuera de línea? Sólo tienes que enviar unmensaje fuera de línea directamente desde tu móvil. eBuddy Mobile Messenger es compatible conmensajería fuera de línea.

Page 4: Informe Final Poo

Escuela Politécnica Nacional

Programación Orientada a Objetos

Crea un chat en JAVA

Carlos Santamaría 2010Ángel López

FORMATO DE UN CHAT EN JAVA

Cuando comenzó a usar Internet como medio, el sistema comenzó a popularizarse rápidamente ypasó a convertirse en una herramienta de comunicación casi indispensable para todos aquellosque 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 elestallido de La Guerra del Golfo; el uso de este sistema de comunicación que plasmaba la realidadsegundo a segundo comenzó a tomarse en serio. Fue en este momento cuando comenzaron aflorecer 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, pudiendoencontrar canales en los que se habla de los temas más simples, hasta canales en donde los temasde conversación son absolutamente serios y de gran acervo cultural.

Page 5: Informe Final Poo

Escuela Politécnica Nacional

Programación Orientada a Objetos

Crea un chat en JAVA

Carlos Santamaría 2010Ángel López

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 lacomunicació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 ciertosrequisitos.

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 buenfuncionamiento 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 suministrancualquier tipo de información respecto, comunicaciones entre canales, entre usuarios, reservas decanales 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 laposibilidad de verse el uno al otro puedan comunicarse de manera sincrónica, al igual que en losencuentros cara a cara, usando la palabra escrita. En esta forma de comunicación se combinan lapermanencia de la palabra escrita y la fluidez del intercambio propia de las conversacionespresé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ándisponibles las 24 horas del día todos los días. Sólo un par de clicks separan a la persona del accesoal 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. Puedeplantearse la posibilidad de que la persona frecuente un mismo chat room y que en éste, a las 7 dela mañana, no haya usuarios. Este pequeño problema se soluciona fácilmente: se puede entrar a

Page 6: Informe Final Poo

Escuela Politécnica Nacional

Programación Orientada a Objetos

Crea un chat en JAVA

Carlos Santamaría 2010Ángel López

otros canales de otros países (por ejemplo, al de España, que remite a un lugar del mundo dondeson 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, elanonimato, facilita la creación de un personaje. Las máscaras esconden a la persona y permitenjugar 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 ycon 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 suobjetivo. }

TIPOS DE CHAT

Los hay de todo tipo, desde el que solo admite texto sobre un fondo liso (la versión primera delMIRC, 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 muypoco tiempo nos encontraremos con chats en 3D (ya existen algunos) acompañados devideoconferencia.

Desarrollo del proyecto

Utilización de sockets

Sockets: Son un sistema de comunicación entre procesos de diferentes máquinas de una red. Másexactamente, un socket es un punto de comunicación por el cual un proceso puede emitir o recibirinformación.Un socket es un punto final de una comunicación bidireccional entre 2 programasejecutándose enla red. Un socket se asocia a un número de puerto de forma que elprotocolo de la capa detransporte (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 esalgo similar a escribir/leer datos de un disco.El servidor corre sobre una máquina y tiene un socket asociado a un puerto determinado, porelque 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 depuerto por el que está escuchando el servidor.

DIAGRAMA

Page 7: Informe Final Poo

Escuela Politécnica Nacional

Programación Orientada a Objetos

Crea un chat en JAVA

Carlos Santamaría 2010Ángel López

El cliente realiza una petición de conexión al servidor con el nombre de máquina del servidor y elpuerto.Si no se produce ningún error el servidor acepta la conexión. Crea un nuevo socket para atender lapeticiónde ese cliente y mantiene el socket original que está escuchando para atender peticiones denuevos clientes.A partir de este momento el cliente y el servidor pueden comunicarse leyendo o escribiendo ensus sockets.La clase Socket implementa un lado de la conexión bidireccional entre dos aplicaciones Java en lared. Permite crear conexiones de clientes con servidores. La clase Server Socket implementa elotro lado de la conexión bidireccional. En concreto permite crear un socket que puede escuchar enun puerto y aceptar conexiones de clientes.Ambas son implementaciones que ocultan los detalles de las plataformas concretas (hardware ysistema operativo) donde se ejecutan las aplicaciones cliente y servidor.

El chat que desarrollamos utiliza sockets, los cuales funcionan bajo una arquitectura clienteservidor, en donde se tiene un servidor y los clientes se conectan a éste y a través de él, secomunican entre sí. La gracia del chat es que hace envió de objetos en vez de simples cadenas detexto, para esto se utiliza la clase ObjectInputStream y ObjectOutputStream, los objetos de estasclases permiten escribir y leer objetos con los métodos writeObject y readObject, ambos recibencomo parámetro un objeto. La idea es que todo lo que viaje por la red debe estar serializado, en elcaso 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 cosano 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 objetosJava a un flujo de salida. Los objetos se pueden leer usando un ObjectInputStream. Dealmacenamiento 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 deobjetos Java a un flujo de salida. Los objetos se pueden leer usando un ObjectInputStream. Dealmacenamiento persistente de objetos se puede realizar mediante un archivo de la secuencia.

Page 8: Informe Final Poo

Escuela Politécnica Nacional

Programación Orientada a Objetos

Crea un chat en JAVA

Carlos Santamaría 2010Ángel López

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 elservidor 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 cualestá en un objeto de la clase RecursoClientes, la cual utiliza el patrón de diseño Singleton (threadsafe).

Cuando un cliente se conecta, el Servidor recibe el nickname del Cliente y busca en la lista si yaexiste, de ser así impide la conexión y avisa al Cliente, es una regla que implementamos, en casocontrario la conexión se acepta y se delega el trabajo a un thread o hilo ManejadorCliente, el cualse encarga de recibir los mensajes del Cliente y se los pasa a los demás Clientes de la lista, ademásse encarga de quitarlo de la lista cuando éste se desconecta y avisa a los demás de la desconexión.

Page 9: Informe Final Poo

Escuela Politécnica Nacional

Programación Orientada a Objetos

Crea un chat en JAVA

Carlos Santamaría 2010Ángel López

Diagrama de clases del cliente:

Diagrama de clases del servidor.

Page 10: Informe Final Poo

Escuela Politécnica Nacional

Programación Orientada a Objetos

Crea un chat en JAVA

Carlos Santamaría 2010Ángel López

El servidor tiene menos clases por lo que se podría decir que es más sencillo pero al mismo tiempohay 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 paradefinir algunas cosas gráficas, nada complejo de entender. La clase más importante esOrquestador, que es la que se encarga de toda la lógica y paso de mensajes hacia el cliente (atravé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 tantoesa clase debe estar tanto en el cliente como en el servidor.

Acá pueden ver el diagrama de secuencia del servidor y del cliente

Page 11: Informe Final Poo

Escuela Politécnica Nacional

Programación Orientada a Objetos

Crea un chat en JAVA

Carlos Santamaría 2010Ángel López

Page 12: Informe Final Poo

Escuela Politécnica Nacional

Programación Orientada a Objetos

Crea un chat en JAVA

Carlos Santamaría 2010Ángel López

Con esos diagramas es fácil entender el paso de mensajes entre los objetos que conforman elsoftware, tanto en la parte cliente como en el servidor. Por ejemplo se puede ver la secuencia demensajes 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 aldesarrollador enfocarse en la lógica específica de su aplicación. Entre las características de laplataforma 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)

N E T B E A N S I D E

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 lenguajede programación. Existe además un número importante de módulos para extender el IDENetBeans. 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 plataformaNetBeans. 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 basadoen 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 ysoporta 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 Engineery 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 ypor sobre todo útil

Capturas del chat funcionando

Page 13: Informe Final Poo

Escuela Politécnica Nacional

Programación Orientada a Objetos

Crea un chat en JAVA

Carlos Santamaría 2010Ángel López

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, yagregamos 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 deherencia.

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 montarmé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 aServidor Chat se crea un objeto de la clase Cliente donde se almacena su Nick (name) y el socketasignado 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 paracada ClienteChat.java que se conecte a ServidorChat.java.

Comprueba que los comandos REGISTER y CLOSE, programados anteriormente, funcionan tal ycomo se esperabaEstudio del ejemplo de uso de Threads “

Page 14: Informe Final Poo

Escuela Politécnica Nacional

Programación Orientada a Objetos

Crea un chat en JAVA

Carlos Santamaría 2010Ángel López

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 threadsejecutan código, si aunque no se impriman en la pantalla tienen asignada la CPU, qué imprimen enla 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 puedaenviarte un mensaje mientras estás escribiendo tú un nuevo mensaje o poniendo un nuevocomando al servidor nos basamos en el código de Ejemplo.java modifica el código de ClienteChat.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ónEl 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 yla 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 futurocomando) Este mensaje aparece en cada una de las pantallas de los usuarios conectados y lapantalla del usuario conectado muestra:nickOrigen: mensaje/nickDestino mensaje

Modifica el código de ServidorChat.java, Cliente.java y de ClienteChat.java para que soporte estosnuevos comandos.

CONCLUSIONES Y RECOMENDACIONES

Se recomienda que:

• Se use SocketChannel de java.nio ya que el problema con la arquitectura utilizada es quemientras más clientes se conecten, más recursos del servidor se utilizarán, ya que por cadacliente se crea un nuevo hilo (Thread). Una solución es NO usar Threads ni Sockets, sino usarSocketChannel de java.nio,el cual es más difícil de utilizar y entender, pero vale la pena ya quela baja en la utilización de recursos es altísima, además de una mejora sustancial en laeficiencia y rapidez de respuesta en el servidor.

• Después de haber analizado las características propias del lenguaje Java, podemos concluirque hasta el momento, es un software de programación en el que podemos confiar al diseñarnuestras paginas web, esto es, por su gran versatilidad, facilidad de programación y seguridad.

Page 15: Informe Final Poo

Escuela Politécnica Nacional

Programación Orientada a Objetos

Crea un chat en JAVA

Carlos Santamaría 2010Ángel López

• Los Chat´s en nuestra época están dando un gran giro comercial, ya que no solo se utiliza paraintercomunicar 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 consus clientes, ya que por medio de ellos pueden, cotizar, hacer pedidos de productos, verificarexistencias en tiempo real y hasta tener una entrevista "cara a cara" (por medio devideoconferencia). Este tipo de comunicación se puede decir que es mas personalizado que lavía telefónica.

Anexos• Más detalles y un video de funcionamiento en http://creaunchatenjava.blogspot.com