SlideShare una empresa de Scribd logo
1 de 15
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.   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?  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.  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. 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 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 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. The objects can be read (reconstituted) using an ObjectInputStream. Los objetos se pueden leer  usando un ObjectInputStream. Persistent storage of objects can be accomplished by using a file for the stream. 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. The objects can be read (reconstituted) using an ObjectInputStream. Los objetos se pueden leer  usando un ObjectInputStream. Persistent storage of objects can be accomplished by using a file for the stream. De almacenamiento persistente de objetos se puede realizar mediante un archivo de la secuencia. If the stream is a network socket stream, the objects can be reconsituted on another host or in another process.  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. Diagrama de clases del cliente: Diagrama de clases del servidor. 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 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 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 “  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. 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
Informe Final Poo
Informe Final Poo
Informe Final Poo
Informe Final Poo
Informe Final Poo
Informe Final Poo
Informe Final Poo
Informe Final Poo
Informe Final Poo
Informe Final Poo
Informe Final Poo
Informe Final Poo
Informe Final Poo
Informe Final Poo

Más contenido relacionado

Destacado

Charte quality team version 5.0 2014
Charte quality team version 5.0 2014Charte quality team version 5.0 2014
Charte quality team version 5.0 2014Vip Agence
 
Boissaye-Marine-M2MAG-mémoire
Boissaye-Marine-M2MAG-mémoireBoissaye-Marine-M2MAG-mémoire
Boissaye-Marine-M2MAG-mémoireMarine Boissaye
 
Pres Web2.0
Pres Web2.0Pres Web2.0
Pres Web2.0kcss
 
20141128 demogr bxl_01_xd
20141128 demogr bxl_01_xd20141128 demogr bxl_01_xd
20141128 demogr bxl_01_xdSocDemoFB
 
Informatik
InformatikInformatik
Informatikgabriela
 
Rapport RSE Square 2013 - Responsabilité Sociétale de l'Entreprise
Rapport RSE Square 2013 - Responsabilité Sociétale de l'EntrepriseRapport RSE Square 2013 - Responsabilité Sociétale de l'Entreprise
Rapport RSE Square 2013 - Responsabilité Sociétale de l'EntrepriseSquare
 
Resumen Clase
Resumen ClaseResumen Clase
Resumen ClaseDIANISCAT
 
Exposicion De Informatica
Exposicion De InformaticaExposicion De Informatica
Exposicion De InformaticaDIANISCAT
 
Pres Web2.0
Pres Web2.0Pres Web2.0
Pres Web2.0kcss
 
My family 2
My family 2My family 2
My family 2CIEF
 

Destacado (18)

Unidad 6
Unidad 6Unidad 6
Unidad 6
 
0 nce 2 p
0 nce 2 p0 nce 2 p
0 nce 2 p
 
Charte quality team version 5.0 2014
Charte quality team version 5.0 2014Charte quality team version 5.0 2014
Charte quality team version 5.0 2014
 
Tema 4 la jornada laboral
Tema 4 la jornada laboralTema 4 la jornada laboral
Tema 4 la jornada laboral
 
janis
janisjanis
janis
 
Boissaye-Marine-M2MAG-mémoire
Boissaye-Marine-M2MAG-mémoireBoissaye-Marine-M2MAG-mémoire
Boissaye-Marine-M2MAG-mémoire
 
Pres Web2.0
Pres Web2.0Pres Web2.0
Pres Web2.0
 
20141128 demogr bxl_01_xd
20141128 demogr bxl_01_xd20141128 demogr bxl_01_xd
20141128 demogr bxl_01_xd
 
Informatik
InformatikInformatik
Informatik
 
Pres Web2.0
Pres Web2.0Pres Web2.0
Pres Web2.0
 
Rapport RSE Square 2013 - Responsabilité Sociétale de l'Entreprise
Rapport RSE Square 2013 - Responsabilité Sociétale de l'EntrepriseRapport RSE Square 2013 - Responsabilité Sociétale de l'Entreprise
Rapport RSE Square 2013 - Responsabilité Sociétale de l'Entreprise
 
gaby 15
gaby 15gaby 15
gaby 15
 
Resumen Clase
Resumen ClaseResumen Clase
Resumen Clase
 
Exposicion De Informatica
Exposicion De InformaticaExposicion De Informatica
Exposicion De Informatica
 
Unvasodeleche
UnvasodelecheUnvasodeleche
Unvasodeleche
 
Fondo Unach Copia
Fondo Unach   CopiaFondo Unach   Copia
Fondo Unach Copia
 
Pres Web2.0
Pres Web2.0Pres Web2.0
Pres Web2.0
 
My family 2
My family 2My family 2
My family 2
 

Similar a Informe Final Poo

Similar a Informe Final Poo (20)

William presentacion mi
William presentacion miWilliam presentacion mi
William presentacion mi
 
MI
MIMI
MI
 
Dn12 u3 a14_vsrg
Dn12 u3 a14_vsrgDn12 u3 a14_vsrg
Dn12 u3 a14_vsrg
 
Historia de irc
Historia de ircHistoria de irc
Historia de irc
 
Los chats y su uso en educación
Los chats y su uso en educaciónLos chats y su uso en educación
Los chats y su uso en educación
 
Chat
ChatChat
Chat
 
Conversacion en linea
Conversacion en lineaConversacion en linea
Conversacion en linea
 
Manual chat
Manual chatManual chat
Manual chat
 
Manual chat
Manual chatManual chat
Manual chat
 
Gnu Social
Gnu SocialGnu Social
Gnu Social
 
Internet lea anderson
Internet lea andersonInternet lea anderson
Internet lea anderson
 
IRC
IRCIRC
IRC
 
La Historía de los Servicíos del chat
La Historía de los Servicíos del chat La Historía de los Servicíos del chat
La Historía de los Servicíos del chat
 
Internet y comunidades virtuales
Internet y comunidades virtuales Internet y comunidades virtuales
Internet y comunidades virtuales
 
Cuaderno apuntes
Cuaderno apuntesCuaderno apuntes
Cuaderno apuntes
 
IRC
IRCIRC
IRC
 
Dn11 u3 a15_vbol
Dn11 u3 a15_vbolDn11 u3 a15_vbol
Dn11 u3 a15_vbol
 
Presentación 6
Presentación 6Presentación 6
Presentación 6
 
Dn11 u3 a15_aag
Dn11 u3 a15_aagDn11 u3 a15_aag
Dn11 u3 a15_aag
 
Historia de la mensajería instantánea
Historia de la mensajería instantáneaHistoria de la mensajería instantánea
Historia de la mensajería instantánea
 

Último

CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 

Último (20)

CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 

Informe Final Poo

  • 1. 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. 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? 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. 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. 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 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 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. The objects can be read (reconstituted) using an ObjectInputStream. Los objetos se pueden leer usando un ObjectInputStream. Persistent storage of objects can be accomplished by using a file for the stream. 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. The objects can be read (reconstituted) using an ObjectInputStream. Los objetos se pueden leer usando un ObjectInputStream. Persistent storage of objects can be accomplished by using a file for the stream. De almacenamiento persistente de objetos se puede realizar mediante un archivo de la secuencia. If the stream is a network socket stream, the objects can be reconsituted on another host or in another process. 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. Diagrama de clases del cliente: Diagrama de clases del servidor. 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 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 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 “ 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. 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