UNIVERSIDAD NACIONAL DE
TRUJILLO
FACULTAD DE CIENCIAS FISICAS Y
MATEMATICAS
ESCUELA DE INFORMATICA
“Aplicación JAVA basada en Socket - Chat común”
CURSO : TELEPROCESAMIENTO
PROFESOR : JOSE A. DIAZ PULIDO
CICLO : V
SECCION : A
ALUMNOS :
 LAYZA MARTINEZ ROGGER
 MONTAÑEZ JULCAMORO EDWIN
 MONTENEGRO CHAVEZ WILLIAM
 RUELAS VASQUEZ DAYANARA
 UGAZ SALAZAR BRANDON
2018
INDICE
RESUMEN.........................................................................................................................3
INTRODUCCIÓN..............................................................................................................4
REALIDAD PROBLEMÁTICA.........................................................................................5
MARCO TEORICO...........................................................................................................6
1. PARADIGMA CLIENTE/SERVIDOR ...................................................................6
2. SOCKETS...............................................................................................................7
3. PROTOCOLOS DE TRANSPORTE ......................................................................8
4. JAVA.......................................................................................................................9
5. HILOS Y SOCKETS EN JAVA............................................................................10
INGENIERIA DEL PROYECTO.....................................................................................12
1. ARQUITECTURA................................................................................................12
2. MODELO..............................................................................................................14
CODIFICACIÓN.............................................................................................................15
.........................................................................................................................................16
CONCLUSIONES............................................................................................................22
BIBLIOGRÁFIA..............................................................................................................23
INDICE DE FIGURAS
Ilustración 1 Paradigma Cliente/Servidor _______________________________________6
Ilustración 2 Socket Servidor ________________________________________________8
Ilustración 3 socket Cliente _________________________________________________8
Ilustración 4 Sockets _____________________________________________________12
Ilustración 5 TCP/IP y MODELO OSI________________________________________13
Ilustración 6 Servidor/Cliente_______________________________________________14
RESUMEN
El presente proyecto trata de llevar a cabo el desarrollo de un Chat común
mediante la Aplicación JAVA basada en Socket. A lo largo del documento
se explicará el caso de estudio especificado como también algunos temas
teóricos que es necesario su descripción para poder conocer más a fondo el
tema y así lograr un mayor entendimiento para el público en general.
INTRODUCCIÓN
La programación en red siempre ha sido dificultosa, el programador debía
de conocer la mayoría de los detalles de la red, incluyendo el hardware
utilizado, los distintos niveles en que se divide la capa de red, las librerías
necesarias para programar en cada capa, etc. Pero, la idea simplemente
consiste en obtener información desde otra máquina, aportada por otra
aplicación software.
Los Sockets sirven para comunicar procesosde diferentes máquinas de una
red.
En las aplicaciones en red es muy común el paradigma cliente-servidor. El
servidor es el que espera las conexiones del cliente (en un lugar claramente
definido) y el cliente es el que lanza las peticiones a la maquina donde se
está ejecutando el servidor, y al lugar donde está esperando el servidor (el
puerto(s) específico que atiende). Una vez establecida la conexión, ésta es
tratada como un stream (flujo) típico de entrada/salida. Cuando se escriben
programas Java que se comunican a través de la red, se está programando
en la capa de aplicación. Típicamente, no se necesita trabajar con las capas
TCP y UDP, en su lugar se puede utilizar las clases del paquete java.net.
Estas clases proporcionan comunicación de red independiente del sistema.
REALIDAD PROBLEMÁTICA
La comunicación es una herramienta para establecer un intercambio de
información entre dos o más participantes con el fin de transmitir un
mensaje.
Actualmente, la comunicación también se da a través de un sistema digital
mediante dispositivos electrónicos; esta se puede dar de forma distribuida,
la cual facilita él envió de mensajes entre una gran cantidad de usuarios que
compartan la misma red.
En los laboratorios de computo usados para dar clases en la escuela de
Ingeniería Informática de la Universidad Nacional de Trujillo, observamos
una gran deficiencia en la comunicación entre los usuarios. Una solución
para este problema consiste en desarrollar un software basado en sockets a
través de un lenguaje de programación (en nuestro caso usaremos Java). un
chat capaz de atender varios clientes a la vez
Con este software daremos solución a los diversos conflictos que se
generan en él envió de un mensaje entre los usuarios que asistan al
laboratorio.
MARCO TEORICO
1. PARADIGMA CLIENTE/SERVIDOR
El paradigma Cliente/Servidor es quizás el más conocido de los paradigmas
para aplicaciones de red. Se usa para describir un modelo de interacción
entre dos procesos, que se ejecutan de forma simultánea. Este modelo es
una comunicación basada en una serie de preguntas y respuestas, que
asegura que, si dos aplicaciones intentan comunicarse, una comienza la
ejecución y espera indefinidamente que la otra le responda y luego continua
con el proceso.
Ilustración 1 Paradigma Cliente/Servidor
Los dos componentes del paradigma son:
Cliente: aplicación que inicia la comunicación, es dirigida por el usuario.
Servidor: es quien responde a los requerimientos de los clientes, son
procesos que se están ejecutando indefinidamente.
Los procesos clientes son más sencillos que los procesos de los servidores,
los primeros no requieren de privilegios de sistemas para funcionar, en
cambio los procesos servidores sí.
Los usuarios cuando quieren acceder a un servicio de red, ejecutan un
software cliente. El diseño de los servidores debe ser muy cuidadoso, debe
incluir código para la manipulación de:
 autenticación: verificar la identidad del cliente.
 seguridad de datos: para que estos no puedan ser accedidos
inapropiadamente.
 privacidad: garantizar que la información privada de un usuario, no
sea accedida por alguien no autorizado.
 protección: asegurar que las aplicaciones no monopolicen los
recursos del sistema.
 autorización: verificar si el cliente tiene acceso al servicio
proporcionado por el servidor.
La mayoría de las comunicaciones punto-a-punto en las redes (incluida
Internet), están basadas en el modelo Cliente/Servidor. Desde el punto de
vista Internet/Intranet, se tendría:
 Un servidor es un ordenador remoto - en algún lugar de la red - que
proporciona información según petición.
 Un cliente funciona en su ordenador local, se comunica con el
servidor remoto, y pide a éste información.
 El servidor envía la información solicitada.
Un único servidor típicamente sirve a una multitud de clientes, ahorrando a
cada uno de ellos el problema de tener la información instalada y
almacenada localmente.
2. SOCKETS
Normalmente, un servidor se ejecuta en una máquina específica y tiene un
socket asociado a un número de puerto específico. El servidor simplemente
espera a la escucha en el socket a que un cliente se conecte con una
petición. El cliente conoce el nombre de la máquina sobre la que está
ejecutándose el servidor y el número de puerto al que está conectado.
Solicitar una conexión consiste en intentar establecer una cita con el
servidor en el puerto de la máquina servidora.
Ilustración 2 Socket Servidor
Si todo va bien, el servidor acepta la conexión. Pero antes, el servidor crea
un nuevo socket en un puerto diferente. Es necesario crear un nuevo socket
(y consecuentemente un número de puerto diferente) de forma que en el
socket original se continúe a la escucha de las peticiones de nuevos clientes
mientras se atiende a las necesidades del cliente conectado. En el cliente, si
se acepta la conexión, el socket se crea satisfactoriamente y se puede
utilizar para comunicarse con el servidor.
Ilustración 3 socket Cliente
Un socket es el extremo final de un enlace punto-a-punto que comunica a
dos programas ejecutándose en una red.
Los sockets siempre están asociados a un número de puerto que es utilizado
por TCP para identificar la aplicación a la que está destinada la solicitud y
poder redirigirsela.
3. PROTOCOLOS DE TRANSPORTE
UDP (User Datagram Protocol)
Es un protocolo no orientado a conexión. Es decir cuando una maquina A
envía paquetes a una maquina B, el flujo es unidireccional. La transferencia
de datos es realizada sin haber realizado previamente una conexión con la
máquina de destino (maquina B), y el destinatario recibirá los datos sin
enviar una confirmación al emisor (la maquina A). Esto es debido a que la
encapsulación de datos enviada por el protocolo UDP no permite transmitir
la información relacionada al emisor. Por ello el destinatario no conocerá al
emisor de los datos excepto su IP.
TCP (Transmission Control Protocol)
Contrariamente a UDP, el protocolo TCP está orientado a conexión.
Cuando una máquina A envía datos a una máquina B, la máquina B es
informada de la llegada de datos, y confirma su buena recepción. Aquí
interviene el control CRC de datos que se basa en una ecuación matemática
que permite verificar la integridad de los datos transmitidos. De este modo,
si los datos recibidos son corruptos, el protocolo TCP permite que los
destinatarios soliciten al emisor que vuelvan a enviar los datos corruptos.
4. JAVA
Lenguaje de programación del servidor La que es hoy en día, uno de los
lenguajes de programación con mayor difusión, fue creado en la década de
los 90 por la compañía Sun Microsystems para su uso en dispositivos
electrónicos de consumo.
Dado que sus características se adaptaban perfectamente al uso en Internet,
poco a poco se convirtió en el lenguaje de programación con mayor
aceptación en ese ámbito.
Siendo el lenguaje orientado a objetos por excelencia, sin duda su mayor
baza es la comunidad de usuarios y desarrolladores que lo siguen, ya que
son innumerables los colectivos que se dedican a mantener y ampliar las
funciones de Java, adaptándolo así a las nuevas tendencias que surgen y
motivando su uso. Podríamos decir entonces, que existe una solución Java
para cada necesidad que pudiéramos tener, y de no ser así pronto se creará.
Algunas de sus características más destacadas son:
 Es orientado a objetos.
 Con soporte en el núcleo a la programación concurrente.
 Sintaxis muy familiar a otros lenguajes de gran importancia, como
C++.
 Es multiplataforma (el código funciona en cualquier plataforma que
disponga de soporte Java. En la actualidad, prácticamente todas).
 Es interpretado: El código Java se compila a un código
independiente de la plataforma y es ejecutado por la máquina virtual
de java (JVM), evitando generar instrucciones nativas.
5. HILOS Y SOCKETS EN JAVA
Un hilo (Thread) es un proceso en ejecución dentro de un programa. Los
hilos implementan prioridad y mecanismos de sincronización.
Los hilos se comunican generalmente a través de campos y los objetos que
tienen esos campos.
La sincronización es la herramienta para evitar este tipo de problemas,
definiendo órdenes estrictos de ejecución.
Todos los hilos de un programa comparten el espacio de memoria,
haciendo posible que dos hilos accedan la misma variable o corran el
mismo método de un objeto al "mismo tiempo". Se crea así la necesidad de
disponer de un mecanismo para bloquear el acceso de un hilo a un dato
crítico si el dato está siendo usado por otro hilo.
Ciclo de Vida de una Thread
Cada hilo, después de su creación y antes de su destrucción, estará en uno
de cuatro estados: recién creada, "corrible", bloqueada, o muerta.
Recién creada (New thread): entra aquí inmediatamente después de su
creación. Datos locales son ubicados e iniciados. Luego de la invocación a
start(), el hilo pasa al estado "corrible".
Corrible (Runnable): Aquí el contexto de ejecución existe y el hilo puede
ocupar la CPU en cualquier momento.
Bloqueada (not Runnable): Se ingresa cuando: se invoca suspend(), el hilo
invoca el método wait() de algún objeto, el hilo invoca sleep(), el hilo
espera por alguna operación de I/O, o el hilo invoca join() de otro hilo para
espera por su término. El hilo vuelve al estado Corrible cuando el evento
por que espera ocurre.
INGENIERIA DEL PROYECTO
1. ARQUITECTURA
La arquitectura de red más utilizada es la arquitectura llamada TCP/IP, que
se basa en el modelo de red teórico OSI. Esta arquitectura toma su nombre
del protocolo de transporte TCP y del protocolo de red IP. Al ser la
arquitectura de red en la que se basa Internet, otras redes que se conectan a
ella también emplean la misma arquitectura.
Ilustración 4 Sockets
El modelo TCP/IP se divide en cuatro niveles, de los que nos interesan
los tres niveles superiores (de menor a mayor):
 Nivel de Interred; Su función es la encaminar los paquetes de
datos hasta su destino final. Utiliza un sistema de
direccionamiento que identifica de forma única a cada dispositivo
de comunicaciones llamado dirección IP.
 Nivel de transporte; Es el encargado de establecer el canal de
comunicaciones extremo a extremo. Dispone de dos protocolos:
TCP y UDP.
 TCP es un protocolo orientado a conexión, es decir, espera
confirmación de cada unidad de datos que envía. Debido a ello
emisor y receptor deben establecer una conexión antes de
empezar a enviarse datos deben cerrarla después de terminar la
comunicación. Funciona análogamente como un servicio de
telefonía.
 UDP es un protocolo no orientado a conexión, sin garantía de
entrega del mensaje pero más rápido que TCP. Por lo tanto, no es
necesario establecer una conexión entre emisor y receptor.
Funciona análogamente como un servicio de correos
convencional.
Tanto TCP como UDP ofrecen sus servicios al nivel de aplicación a
través de los Puntos de Acceso al Servicio (SAP), denominados también
puertos y que se identifican con número comprendido entre 0 y 65535.
De esta manera permiten multiplexar sobre un mismo host (dirección
IP) múltiples servicios (aplicaciones).
 Nivel de aplicación; Es el nivel más alto del modelo TCP/IP y lo
forman las aplicaciones que ofrecen sus servicios al usuario o al
sistema dóndeestán instaladas. Ejemplos de protocolosdeeste
nivel son HTTP, FTP o SSH.
Ilustración 5 TCP/IP y MODELO OSI
2. MODELO
En Java, las clases que nos permiten la comunicación en red se encuentran
en el paquete java.net.
Ilustración 6 Servidor/Cliente
 El servidor asigna un número de puerto. Cuando el cliente solicita
una conexión, el servidor abre un socket a través del método
accept().
 El cliente establece una conexión con el host en el puerto
especificado.
 Tanto el cliente como el servidor se comunican a través de
InputStream y de OutputStream
CODIFICACIÓN
Clase Servidor
Código principal del Servidor, dondese implementó las interfaces y se
declara variables ServerSocket y Socket, quenos servirán para la
conexión con el usuario.
Método que iniciará la comunicación conel cliente, serverSocket se
inicializa con puerto 5000 para la conexión, luego cuando acepta la
conexión, lo guarda en la variable clienteSocket para usarlo cuando se crea
el Hilo denominado usuario, que proviene de la clase HiloServidor
Clase HiloServidor
Lo principal son las declaraciones de las variables de tipo Socket y
Servidor, que nos permitirá usar el socket del usuario para comunicarnos y
la ventana del servidor para envío de mensajes.
Esta clase tiene se extiende de la clase Thread, ya que se necesita hacer
uso del concepto de hilos para que se puedan ejecutar varios a la vez.
Run es un método para ejecutar este hilo, lo principal son las variables
entrada y salida, de tipo DataImputStream y DataOutputStream, que
nos servirán para poder comunicarnos con los usuarios.
Un punto importante es que el envío de mensaje se realiza a través de un
número y luego el mensaje, este número le indica al servidor que hacer con
el mensaje.
Clase Cliente
La función más importante del Cliente, lo que hace es inicializar la variable
socket con la IP del Servidor previamente ingresada y el número de puerto,
que debe ser el mismo que el del cliente.
Posterior a que se acepte la conexión, se crea un nuevo HiloCliente que
nos sirve para la comunicación con el servidor.
Clase HiloCliente
De manera análoga con la clase HiloServidor, esta es diseñada para
ejecutarse como hilo, la entrada y salida de mensajes se realiza de la misma
forma, y cuando recibe un mensaje, lo hace con un número que indica que
hacer con el mensaje.
NOTA:
Vale recalcar que la comunicación es entre Cliente y Servidor, por ende, si
un cliente quiere comunicarse con otro, necesita mandar el mensaje al
servidor para que este se lo envíe al otro cliente a comunicar.
La clase Privado es una implementación de una interfaz que muestra
mensajes enviados de manera privada.
USO DE HILOS EN EL CODIGO:
Para permitir que usuarios se conecten simultáneamente, se hace uso de
hilos (threads). Los hilos se usan para las instancias que interactúan con
nuestro servidor permitiendo así evitar problemas con lo que se conoce
como código bloqueante.
El código bloqueante, es un segmento de código que tarda una cantidad
considerable de tiempo en ejecutarse y que de no ser por tener diferentes
hilos asignados para cada usuario ejecutándose independientemente uno del
otro, bloquearía la aplicación para los demás mientras alguno realiza el
proceso bloqueante.
CONCLUSIONES
 Se logró resolver la problemática que se especificó en las primeras
páginas del informe, logrando así el desarrollo de una aplicación en
Java basada en socket, para la realización de un chat común.
 Para poder intercambiar mensajes y/o información, es decir para que
se dé la comunicación entre los distintos clientes que están
sincronizados; se logra mediante procesos, es decir: el cliente
enviará la solicitud al servidor, quien es el encargado de recibir y
aceptar la solicitud para poder enviar el mensaje a los demás clientes.
 La comunicación se puede dar de manera distribuida y también de
uno a uno es decir unidireccional mediante el chat privado.
 En caso que un cliente cualquiera cierre la conexión, otro nuevo
cliente puede acceder. Pero si el servidor cierra la conexión entonces
finaliza todo tipo de conexión y se cierra por completo.
 Se usó a Java como aplicación debido a que es un lenguaje de
programación orientados a objetos, en la cual se puede trabajar de
una manera mucho más eficiente debido a las interfaces que posee
como también a algunos recursos que nos facilitan la programación.
BIBLIOGRÁFIA
Fernández N, Alcaraz M (2005)” Desarrollo de una plataforma
multiusuario en tiempo real”.
Chiques Chávez L.(2011)”Comunicación Remota y Local. Software de
Comunicación”. Trujillo.
http://nereida.deioc.ull.es/~cleon/doctorado/doc06/doc06/html/node9.html
https://upcommons.upc.edu/bitstream/handle/2099.1/3703/35773-
1.pdf?sequence=2&isAllowed=y
https://www.ctr.unican.es/asignaturas/procodis_3_II/Doc/Procodis_6_01.p
df

Proyecto final teleprocesamiento

  • 1.
    UNIVERSIDAD NACIONAL DE TRUJILLO FACULTADDE CIENCIAS FISICAS Y MATEMATICAS ESCUELA DE INFORMATICA “Aplicación JAVA basada en Socket - Chat común” CURSO : TELEPROCESAMIENTO PROFESOR : JOSE A. DIAZ PULIDO CICLO : V SECCION : A ALUMNOS :  LAYZA MARTINEZ ROGGER  MONTAÑEZ JULCAMORO EDWIN  MONTENEGRO CHAVEZ WILLIAM  RUELAS VASQUEZ DAYANARA  UGAZ SALAZAR BRANDON 2018
  • 2.
    INDICE RESUMEN.........................................................................................................................3 INTRODUCCIÓN..............................................................................................................4 REALIDAD PROBLEMÁTICA.........................................................................................5 MARCO TEORICO...........................................................................................................6 1.PARADIGMA CLIENTE/SERVIDOR ...................................................................6 2. SOCKETS...............................................................................................................7 3. PROTOCOLOS DE TRANSPORTE ......................................................................8 4. JAVA.......................................................................................................................9 5. HILOS Y SOCKETS EN JAVA............................................................................10 INGENIERIA DEL PROYECTO.....................................................................................12 1. ARQUITECTURA................................................................................................12 2. MODELO..............................................................................................................14 CODIFICACIÓN.............................................................................................................15 .........................................................................................................................................16 CONCLUSIONES............................................................................................................22 BIBLIOGRÁFIA..............................................................................................................23 INDICE DE FIGURAS Ilustración 1 Paradigma Cliente/Servidor _______________________________________6 Ilustración 2 Socket Servidor ________________________________________________8 Ilustración 3 socket Cliente _________________________________________________8 Ilustración 4 Sockets _____________________________________________________12 Ilustración 5 TCP/IP y MODELO OSI________________________________________13 Ilustración 6 Servidor/Cliente_______________________________________________14
  • 3.
    RESUMEN El presente proyectotrata de llevar a cabo el desarrollo de un Chat común mediante la Aplicación JAVA basada en Socket. A lo largo del documento se explicará el caso de estudio especificado como también algunos temas teóricos que es necesario su descripción para poder conocer más a fondo el tema y así lograr un mayor entendimiento para el público en general.
  • 4.
    INTRODUCCIÓN La programación enred siempre ha sido dificultosa, el programador debía de conocer la mayoría de los detalles de la red, incluyendo el hardware utilizado, los distintos niveles en que se divide la capa de red, las librerías necesarias para programar en cada capa, etc. Pero, la idea simplemente consiste en obtener información desde otra máquina, aportada por otra aplicación software. Los Sockets sirven para comunicar procesosde diferentes máquinas de una red. En las aplicaciones en red es muy común el paradigma cliente-servidor. El servidor es el que espera las conexiones del cliente (en un lugar claramente definido) y el cliente es el que lanza las peticiones a la maquina donde se está ejecutando el servidor, y al lugar donde está esperando el servidor (el puerto(s) específico que atiende). Una vez establecida la conexión, ésta es tratada como un stream (flujo) típico de entrada/salida. Cuando se escriben programas Java que se comunican a través de la red, se está programando en la capa de aplicación. Típicamente, no se necesita trabajar con las capas TCP y UDP, en su lugar se puede utilizar las clases del paquete java.net. Estas clases proporcionan comunicación de red independiente del sistema.
  • 5.
    REALIDAD PROBLEMÁTICA La comunicaciónes una herramienta para establecer un intercambio de información entre dos o más participantes con el fin de transmitir un mensaje. Actualmente, la comunicación también se da a través de un sistema digital mediante dispositivos electrónicos; esta se puede dar de forma distribuida, la cual facilita él envió de mensajes entre una gran cantidad de usuarios que compartan la misma red. En los laboratorios de computo usados para dar clases en la escuela de Ingeniería Informática de la Universidad Nacional de Trujillo, observamos una gran deficiencia en la comunicación entre los usuarios. Una solución para este problema consiste en desarrollar un software basado en sockets a través de un lenguaje de programación (en nuestro caso usaremos Java). un chat capaz de atender varios clientes a la vez Con este software daremos solución a los diversos conflictos que se generan en él envió de un mensaje entre los usuarios que asistan al laboratorio.
  • 6.
    MARCO TEORICO 1. PARADIGMACLIENTE/SERVIDOR El paradigma Cliente/Servidor es quizás el más conocido de los paradigmas para aplicaciones de red. Se usa para describir un modelo de interacción entre dos procesos, que se ejecutan de forma simultánea. Este modelo es una comunicación basada en una serie de preguntas y respuestas, que asegura que, si dos aplicaciones intentan comunicarse, una comienza la ejecución y espera indefinidamente que la otra le responda y luego continua con el proceso. Ilustración 1 Paradigma Cliente/Servidor Los dos componentes del paradigma son: Cliente: aplicación que inicia la comunicación, es dirigida por el usuario. Servidor: es quien responde a los requerimientos de los clientes, son procesos que se están ejecutando indefinidamente. Los procesos clientes son más sencillos que los procesos de los servidores, los primeros no requieren de privilegios de sistemas para funcionar, en cambio los procesos servidores sí. Los usuarios cuando quieren acceder a un servicio de red, ejecutan un software cliente. El diseño de los servidores debe ser muy cuidadoso, debe incluir código para la manipulación de:  autenticación: verificar la identidad del cliente.
  • 7.
     seguridad dedatos: para que estos no puedan ser accedidos inapropiadamente.  privacidad: garantizar que la información privada de un usuario, no sea accedida por alguien no autorizado.  protección: asegurar que las aplicaciones no monopolicen los recursos del sistema.  autorización: verificar si el cliente tiene acceso al servicio proporcionado por el servidor. La mayoría de las comunicaciones punto-a-punto en las redes (incluida Internet), están basadas en el modelo Cliente/Servidor. Desde el punto de vista Internet/Intranet, se tendría:  Un servidor es un ordenador remoto - en algún lugar de la red - que proporciona información según petición.  Un cliente funciona en su ordenador local, se comunica con el servidor remoto, y pide a éste información.  El servidor envía la información solicitada. Un único servidor típicamente sirve a una multitud de clientes, ahorrando a cada uno de ellos el problema de tener la información instalada y almacenada localmente. 2. SOCKETS Normalmente, un servidor se ejecuta en una máquina específica y tiene un socket asociado a un número de puerto específico. El servidor simplemente espera a la escucha en el socket a que un cliente se conecte con una petición. El cliente conoce el nombre de la máquina sobre la que está ejecutándose el servidor y el número de puerto al que está conectado. Solicitar una conexión consiste en intentar establecer una cita con el servidor en el puerto de la máquina servidora.
  • 8.
    Ilustración 2 SocketServidor Si todo va bien, el servidor acepta la conexión. Pero antes, el servidor crea un nuevo socket en un puerto diferente. Es necesario crear un nuevo socket (y consecuentemente un número de puerto diferente) de forma que en el socket original se continúe a la escucha de las peticiones de nuevos clientes mientras se atiende a las necesidades del cliente conectado. En el cliente, si se acepta la conexión, el socket se crea satisfactoriamente y se puede utilizar para comunicarse con el servidor. Ilustración 3 socket Cliente Un socket es el extremo final de un enlace punto-a-punto que comunica a dos programas ejecutándose en una red. Los sockets siempre están asociados a un número de puerto que es utilizado por TCP para identificar la aplicación a la que está destinada la solicitud y poder redirigirsela. 3. PROTOCOLOS DE TRANSPORTE UDP (User Datagram Protocol) Es un protocolo no orientado a conexión. Es decir cuando una maquina A envía paquetes a una maquina B, el flujo es unidireccional. La transferencia
  • 9.
    de datos esrealizada sin haber realizado previamente una conexión con la máquina de destino (maquina B), y el destinatario recibirá los datos sin enviar una confirmación al emisor (la maquina A). Esto es debido a que la encapsulación de datos enviada por el protocolo UDP no permite transmitir la información relacionada al emisor. Por ello el destinatario no conocerá al emisor de los datos excepto su IP. TCP (Transmission Control Protocol) Contrariamente a UDP, el protocolo TCP está orientado a conexión. Cuando una máquina A envía datos a una máquina B, la máquina B es informada de la llegada de datos, y confirma su buena recepción. Aquí interviene el control CRC de datos que se basa en una ecuación matemática que permite verificar la integridad de los datos transmitidos. De este modo, si los datos recibidos son corruptos, el protocolo TCP permite que los destinatarios soliciten al emisor que vuelvan a enviar los datos corruptos. 4. JAVA Lenguaje de programación del servidor La que es hoy en día, uno de los lenguajes de programación con mayor difusión, fue creado en la década de los 90 por la compañía Sun Microsystems para su uso en dispositivos electrónicos de consumo. Dado que sus características se adaptaban perfectamente al uso en Internet, poco a poco se convirtió en el lenguaje de programación con mayor aceptación en ese ámbito. Siendo el lenguaje orientado a objetos por excelencia, sin duda su mayor baza es la comunidad de usuarios y desarrolladores que lo siguen, ya que
  • 10.
    son innumerables loscolectivos que se dedican a mantener y ampliar las funciones de Java, adaptándolo así a las nuevas tendencias que surgen y motivando su uso. Podríamos decir entonces, que existe una solución Java para cada necesidad que pudiéramos tener, y de no ser así pronto se creará. Algunas de sus características más destacadas son:  Es orientado a objetos.  Con soporte en el núcleo a la programación concurrente.  Sintaxis muy familiar a otros lenguajes de gran importancia, como C++.  Es multiplataforma (el código funciona en cualquier plataforma que disponga de soporte Java. En la actualidad, prácticamente todas).  Es interpretado: El código Java se compila a un código independiente de la plataforma y es ejecutado por la máquina virtual de java (JVM), evitando generar instrucciones nativas. 5. HILOS Y SOCKETS EN JAVA Un hilo (Thread) es un proceso en ejecución dentro de un programa. Los hilos implementan prioridad y mecanismos de sincronización. Los hilos se comunican generalmente a través de campos y los objetos que tienen esos campos. La sincronización es la herramienta para evitar este tipo de problemas, definiendo órdenes estrictos de ejecución. Todos los hilos de un programa comparten el espacio de memoria, haciendo posible que dos hilos accedan la misma variable o corran el mismo método de un objeto al "mismo tiempo". Se crea así la necesidad de
  • 11.
    disponer de unmecanismo para bloquear el acceso de un hilo a un dato crítico si el dato está siendo usado por otro hilo. Ciclo de Vida de una Thread Cada hilo, después de su creación y antes de su destrucción, estará en uno de cuatro estados: recién creada, "corrible", bloqueada, o muerta. Recién creada (New thread): entra aquí inmediatamente después de su creación. Datos locales son ubicados e iniciados. Luego de la invocación a start(), el hilo pasa al estado "corrible". Corrible (Runnable): Aquí el contexto de ejecución existe y el hilo puede ocupar la CPU en cualquier momento. Bloqueada (not Runnable): Se ingresa cuando: se invoca suspend(), el hilo invoca el método wait() de algún objeto, el hilo invoca sleep(), el hilo espera por alguna operación de I/O, o el hilo invoca join() de otro hilo para espera por su término. El hilo vuelve al estado Corrible cuando el evento por que espera ocurre.
  • 12.
    INGENIERIA DEL PROYECTO 1.ARQUITECTURA La arquitectura de red más utilizada es la arquitectura llamada TCP/IP, que se basa en el modelo de red teórico OSI. Esta arquitectura toma su nombre del protocolo de transporte TCP y del protocolo de red IP. Al ser la arquitectura de red en la que se basa Internet, otras redes que se conectan a ella también emplean la misma arquitectura. Ilustración 4 Sockets El modelo TCP/IP se divide en cuatro niveles, de los que nos interesan los tres niveles superiores (de menor a mayor):  Nivel de Interred; Su función es la encaminar los paquetes de datos hasta su destino final. Utiliza un sistema de direccionamiento que identifica de forma única a cada dispositivo de comunicaciones llamado dirección IP.  Nivel de transporte; Es el encargado de establecer el canal de comunicaciones extremo a extremo. Dispone de dos protocolos: TCP y UDP.  TCP es un protocolo orientado a conexión, es decir, espera confirmación de cada unidad de datos que envía. Debido a ello emisor y receptor deben establecer una conexión antes de empezar a enviarse datos deben cerrarla después de terminar la
  • 13.
    comunicación. Funciona análogamentecomo un servicio de telefonía.  UDP es un protocolo no orientado a conexión, sin garantía de entrega del mensaje pero más rápido que TCP. Por lo tanto, no es necesario establecer una conexión entre emisor y receptor. Funciona análogamente como un servicio de correos convencional. Tanto TCP como UDP ofrecen sus servicios al nivel de aplicación a través de los Puntos de Acceso al Servicio (SAP), denominados también puertos y que se identifican con número comprendido entre 0 y 65535. De esta manera permiten multiplexar sobre un mismo host (dirección IP) múltiples servicios (aplicaciones).  Nivel de aplicación; Es el nivel más alto del modelo TCP/IP y lo forman las aplicaciones que ofrecen sus servicios al usuario o al sistema dóndeestán instaladas. Ejemplos de protocolosdeeste nivel son HTTP, FTP o SSH. Ilustración 5 TCP/IP y MODELO OSI
  • 14.
    2. MODELO En Java,las clases que nos permiten la comunicación en red se encuentran en el paquete java.net. Ilustración 6 Servidor/Cliente  El servidor asigna un número de puerto. Cuando el cliente solicita una conexión, el servidor abre un socket a través del método accept().  El cliente establece una conexión con el host en el puerto especificado.  Tanto el cliente como el servidor se comunican a través de InputStream y de OutputStream
  • 15.
    CODIFICACIÓN Clase Servidor Código principaldel Servidor, dondese implementó las interfaces y se declara variables ServerSocket y Socket, quenos servirán para la conexión con el usuario.
  • 16.
    Método que iniciarála comunicación conel cliente, serverSocket se inicializa con puerto 5000 para la conexión, luego cuando acepta la conexión, lo guarda en la variable clienteSocket para usarlo cuando se crea el Hilo denominado usuario, que proviene de la clase HiloServidor
  • 17.
    Clase HiloServidor Lo principalson las declaraciones de las variables de tipo Socket y Servidor, que nos permitirá usar el socket del usuario para comunicarnos y la ventana del servidor para envío de mensajes. Esta clase tiene se extiende de la clase Thread, ya que se necesita hacer uso del concepto de hilos para que se puedan ejecutar varios a la vez. Run es un método para ejecutar este hilo, lo principal son las variables entrada y salida, de tipo DataImputStream y DataOutputStream, que nos servirán para poder comunicarnos con los usuarios.
  • 18.
    Un punto importantees que el envío de mensaje se realiza a través de un número y luego el mensaje, este número le indica al servidor que hacer con el mensaje.
  • 19.
    Clase Cliente La funciónmás importante del Cliente, lo que hace es inicializar la variable socket con la IP del Servidor previamente ingresada y el número de puerto, que debe ser el mismo que el del cliente. Posterior a que se acepte la conexión, se crea un nuevo HiloCliente que nos sirve para la comunicación con el servidor.
  • 20.
    Clase HiloCliente De maneraanáloga con la clase HiloServidor, esta es diseñada para ejecutarse como hilo, la entrada y salida de mensajes se realiza de la misma forma, y cuando recibe un mensaje, lo hace con un número que indica que hacer con el mensaje. NOTA: Vale recalcar que la comunicación es entre Cliente y Servidor, por ende, si un cliente quiere comunicarse con otro, necesita mandar el mensaje al servidor para que este se lo envíe al otro cliente a comunicar. La clase Privado es una implementación de una interfaz que muestra mensajes enviados de manera privada. USO DE HILOS EN EL CODIGO: Para permitir que usuarios se conecten simultáneamente, se hace uso de hilos (threads). Los hilos se usan para las instancias que interactúan con
  • 21.
    nuestro servidor permitiendoasí evitar problemas con lo que se conoce como código bloqueante. El código bloqueante, es un segmento de código que tarda una cantidad considerable de tiempo en ejecutarse y que de no ser por tener diferentes hilos asignados para cada usuario ejecutándose independientemente uno del otro, bloquearía la aplicación para los demás mientras alguno realiza el proceso bloqueante.
  • 22.
    CONCLUSIONES  Se logróresolver la problemática que se especificó en las primeras páginas del informe, logrando así el desarrollo de una aplicación en Java basada en socket, para la realización de un chat común.  Para poder intercambiar mensajes y/o información, es decir para que se dé la comunicación entre los distintos clientes que están sincronizados; se logra mediante procesos, es decir: el cliente enviará la solicitud al servidor, quien es el encargado de recibir y aceptar la solicitud para poder enviar el mensaje a los demás clientes.  La comunicación se puede dar de manera distribuida y también de uno a uno es decir unidireccional mediante el chat privado.  En caso que un cliente cualquiera cierre la conexión, otro nuevo cliente puede acceder. Pero si el servidor cierra la conexión entonces finaliza todo tipo de conexión y se cierra por completo.  Se usó a Java como aplicación debido a que es un lenguaje de programación orientados a objetos, en la cual se puede trabajar de una manera mucho más eficiente debido a las interfaces que posee como también a algunos recursos que nos facilitan la programación.
  • 23.
    BIBLIOGRÁFIA Fernández N, AlcarazM (2005)” Desarrollo de una plataforma multiusuario en tiempo real”. Chiques Chávez L.(2011)”Comunicación Remota y Local. Software de Comunicación”. Trujillo. http://nereida.deioc.ull.es/~cleon/doctorado/doc06/doc06/html/node9.html https://upcommons.upc.edu/bitstream/handle/2099.1/3703/35773- 1.pdf?sequence=2&isAllowed=y https://www.ctr.unican.es/asignaturas/procodis_3_II/Doc/Procodis_6_01.p df