Upload
9704181410
View
247
Download
0
Embed Size (px)
Citation preview
7/23/2019 SOCKETS en java cliente servidor
1/30
7/23/2019 SOCKETS en java cliente servidor
2/30
7/23/2019 SOCKETS en java cliente servidor
3/30
1. Fundamentos
2. Definicin
3. Tipos de Sockets
3.1. Socket Stream
3.2. Socket Datagram3.3. Socket Raw
3.4. Diferencias entre Socket Stream y Datagrama
4. Funcionamiento Genrico de Sockets
7/23/2019 SOCKETS en java cliente servidor
4/30
!. "rogramacin de Sockets en #a$a!.1. #a$a Sockets
!.2. %ode&o de 'omunicaciones con #a$a
!.3. (pertura de Sockets
!.4. 'reacin de Streams
!.4.1. Streams de )ntrada
!.4.2. Streams de Sa&ida!.!. 'ierre de Sockets
*. (p&icacin '&iente+Se$idor
,. )-emp&o de (p&icacin Transmisin de(rc/i$os
0. '/at
'onc&usiones
Referencias
7/23/2019 SOCKETS en java cliente servidor
5/30
Los sockets son un sistema de comunicacin entre procesos de diferentes
mquinas de una red. Ms exactamente, un socket es un punto de
comunicacin por el cual un proceso puede emitir o recibir informacin.
Los sockets utilizan una serie de primitivas para establecer el punto de
comunicacin, para conectarse a una mquina remota en un determinado
puerto que est disponible, para escuchar en l, para leer o escribir y publicar
informacin en l, y finalmente para desconectarse. on todas las primitivas
que ofrecen los sockets, se puede crear un sistema de dilo!o muy completo.
7/23/2019 SOCKETS en java cliente servidor
6/30
Figura 1."bstraccin del proceso de comunicacin entre dos mquinas.
Aplicacinque enva
datos
Aplicacinque recibe
datos
Algo quepermite la
comunicacin
socket
MquinaA
MquinaB
Algo quepermite la
comunicacin
socket
Procesode
Aplicacin
Proceso deComunicaci
n
7/23/2019 SOCKETS en java cliente servidor
7/30
#s as$ como estos %puntos finales& sirven de enlaces de comunicaciones entre
procesos. Los procesos tratan a los sockets como descriptores de ficheros, de
forma que se pueden intercambiar datos con otros procesos transmitiendo yrecibiendo a travs de sockets.
Figura 2. omunicacin entre dos procesos a travs de sockets.
Los mecanismos de comunicacin entre procesos pueden tener lu!ar dentro de la
misma mquina o a travs de una red. 'eneralmente son usados en forma de
cliente(servidor, es decir, cuando un cliente y un servidor establecen una
conexin, lo hacen a travs de un socket.
Proceso A
Proceso B
7/23/2019 SOCKETS en java cliente servidor
8/30
#l tipo de sockets describe la forma en la que se transfiere informacin a travsde ese socket. #xisten muchos tipos de sockets, sin embar!o, los ms
populares son)
* +tream -/
* 0ata!ram 10/
* 2a3 acceso directo al protocolo) root/
7/23/2019 SOCKETS en java cliente servidor
9/30
omo se ha mencionado, la comunicacin con sockets hace uso de una serie
de primitivas, entre las que destacan socket para establecer el punto de
comunicacin, connect para conectarse a una maquina remota en un
determinado puerto que est disponible, bind para escribir en l y publicar
informacin, read para leer de l, shutdo3n o close para desconectarse, entre
otras que se hacen mencin en la tabla 4. on todas estas primitivas se puedeestablecer un sistema de comunicaciones muy completo. #n la fi!ura 5 se
muestra el funcionamiento de una conexin con sockets.
7/23/2019 SOCKETS en java cliente servidor
10/30Figura !. 6uncionamiento de una conexin socket.
Abrir canalcomunicacin socket
()
Cerrar canalcomunicacin
shutdown()
Envo y recepcin dedatos read() - write ()
Crear proceso hio
fork ()
Esperar peticionesacceder ()
Esperar recibirsolicitudes
listen ()
Publicar en la red ladireccin del canalde comunicacin
bind ()
SERVIDOR CLIENTE
Abrir canalcomunicacin socket
()
Cerrar canalcomunicacin
shutdown()
Envo y recepcin dedatos read() - write ()
Conectar conservidor connect ()
7/23/2019 SOCKETS en java cliente servidor
11/30
La pro!ramacin utilizando sockets involucra principalmente a dos clases)
+ocket y 0ata!ram+ocket, a la que se incorpora una tercera no tan
empleada, +erver+ocket, que solamente se utiliza para implementarservidores, mientras que las dos primeras se pueden usar para crear tanto
clientes como servidores, representando comunicaciones - la primera y
comunicaciones 10 la se!unda.
7/23/2019 SOCKETS en java cliente servidor
12/30
#l paquete 7ava.net de la plataforma 8ava proporciona una clase +ocket, la cual
implementa una de las partes de la comunicacin bidireccional entre un
pro!rama 8ava y otro pro!rama en la red.
7/23/2019 SOCKETS en java cliente servidor
13/30
#l modelo de comunicaciones ms simple es el si!uiente)
*#l servidor establece un puerto y espera durante un cierto tiempo timeout/ a
que el cliente establezca la conexin. undo el cliente solicite una conexin, el
servidor abrir la conexin socket con el mtodo accept/.
*#l cliente establece una conexin con la mquina host a travs del puerto quese desi!ne en el parmetro respectivo.
*#l cliente y el servidor se comunican con mane7adores 9nput+tream y
:utput+tream.
#n la fi!ura ; se puede observar el modelo de comunicaciones descrito.
7/23/2019 SOCKETS en java cliente servidor
14/30
Figura 0. Modelo de comunicacin liente(+ervidor con sockets en 8ava
!ervidor
!erver!ocket"port#$ timeout%
accept"%
&utput!tream'nput!tream
close"%
Cliente
!ocket"host$
port#%
&utput!tream
'nput!tream
close"%
7/23/2019 SOCKETS en java cliente servidor
15/30
+i estamos implementando un liente, el socket se abre de la forma)
Socket miCliente;
miCliente = new Socket( "maquina", numeroPuerto );
0onde maquina es el nombre de la mquina en donde estamos intentando
abrir la conexin y numerouerto es el puerto un n?.
7/23/2019 SOCKETS en java cliente servidor
16/30
#n el e7emplo anterior no se usan excepciones@ sin embar!o, es una !ran idea
la captura de excepciones cuando se est traba7ando con sockets. #l mismo
e7emplo quedar$a como)
Socket miCliente;
try {
miCliente = new Socket( "maquina",numeroPuerto );
}
catch( IOEce!tion e )
{Sytem#out#!rintln( e );
}
+i estamos pro!ramando un +ervidor, la forma de apertura del socket es la que
muestra el si!uiente e7emplo)
Socket miSer$icio;
try {
miSer$icio = new Ser$erSocket( numeroPuerto );
}
catch( IOEce!tion e )
{
Sytem#out#!rintln( e );
}
7/23/2019 SOCKETS en java cliente servidor
17/30
" la hora de la implementacin de un servidor tambin necesitamos crear un
ob7eto socket desde el +erver+ocket para que est atento a las conexiones quele puedan realizar clientes potenciales y poder aceptar esas conexiones)
Socket ocketSer$icio = null;
try {
ocketSer$icio = miSer$icio#acce!t();
}catch( IOEce!tion e )
{
Sytem#out#!rintln( e );
}
7/23/2019 SOCKETS en java cliente servidor
18/30
#n la parte liente de la aplicacin, se puede utilizar la clase 0ata9nput+tream
para crear un stream de entrada que est listo a recibir todas las respuestas
que el servidor le env$e.
%ataIn!utStream entra&a;
try {entra&a = new %ataIn!utStream( miCliente#'etIn!utStream() );
}
catch( IOEce!tion e )
{
Sytem#out#!rintln( e );
}
La clase 0ata9nput+tream permite la lectura de l$neas de texto y tipos de datos
primitivos de 8ava de un modo altamente portable@ dispone de mtodos para
leer todos esos tipos como) read/, readhar/, read9nt/, read0ouble/ y
readLine/. 0eberemos utilizar la funcin que creamos necesaria dependiendo
del tipo de dato que esperemos recibir del servidor.
7/23/2019 SOCKETS en java cliente servidor
19/30
#n el lado del +ervidor, tambin usaremos 0ata9nput+tream, pero en este caso
para recibir las entradas que se produzcan de los clientes que se hayan
conectado)
%ataIn!utStream entra&a;
try {
entra&a = new %ataIn!utStream( ocketSer$icio#'etIn!utStream() );
}
catch( IOEce!tion e )
{
Sytem#out#!rintln( e );
}
7/23/2019 SOCKETS en java cliente servidor
20/30
#n la parte del liente podemos crear un stream de salida para enviar informacin al socket
del servidor utilizando las clases rint+tream o 0ata:utput+tream)
PrintStream ali&a;
try {
ali&a = new PrintStream( miCliente#'etOut!utStream() );
}
catch( IOEce!tion e )
{
Sytem#out#!rintln( e );
}
La clase rint+tream tiene mtodos para la representacin textual de todos los datos
primitivos de 8ava. +us mtodos 3rite y println/ tienen una especial importancia en este
aspecto. Ao obstante, para el env$o de informacin al servidor tambin podemos utilizar
0ata:utput+tream)
%ataOut!utStream ali&a;
try {
ali&a = new %ataOut!utStream( miCliente#'etOut!utStream() );
}
catch( IOEce!tion e )
{
Sytem#out#!rintln( e ); }
7/23/2019 SOCKETS en java cliente servidor
21/30
La clase 0ata:utput+tream permite escribir cualquiera de los tipos primitivos de
8ava, muchos de sus mtodos escriben un tipo de dato primitivo en el stream de
salida. 0e todos esos mtodos, el ms
7/23/2019 SOCKETS en java cliente servidor
22/30
+iempre deberemos cerrar los canales de entrada y salida que se hayan abierto durante la
e7ecucin de la aplicacin. #n la parte del cliente)
try {
ali&a#cloe();
entra&a#cloe();
miCliente#cloe();
}
catch( IOEce!tion e )
{Sytem#out#!rintln( e );
}
C en la parte del servidor)
try {
ali&a#cloe();entra&a#cloe();
ocketSer$icio#cloe();
miSer$icio#cloe();
}
catch( IOEce!tion e )
{
Sytem#out#!rintln( e ); }
7/23/2019 SOCKETS en java cliente servidor
23/30
ara entender de manera prctica los mtodos descritos l$neas arriba
mostraremos una pequeDa aplicacin cliente(servidor. rimero crearemos un
servidor +erver.7ava que atender a un cliente. ara hacerlo simple, el servidor
slo le enviar un mensa7e al cliente y ste terminar la conexin. #l servidor
quedar disponible para atender a otro cliente. #s importante saber que, para
que el socket funcione, los servicios -E9 deben de estar activos, aunque los
pro!ramas cliente y servidor corran en la misma mquina.
" continuacin escribiremos el cdi!o del servidor que %correr para siempre&,
as$ que para detenerlo deber de cortar manualmente la aplicacin.
7/23/2019 SOCKETS en java cliente servidor
24/30
ara entender con mayor claridad la aplicacin de los sockets, a continuacinse presenta el cdi!o de un sistema cliente(servidor para la transmisin de
archivos en cualquier formato.
#l +ervidor tiene la capacidad de transmitir a los clientes que lo deseen un
determinado archivo, por e7emplo traba7o.ppt, el cual se encuentra localizado en
un path especifico que el +ervidor conoce. #ntonces, uno o ms clientes
acceden a dicho servidor por medio de su direccin ip y colocan el path local en
el que desean almacenar el archivo que estn solicitando al servidor. #l cdi!o
de la aplicacin descrita es el si!uiente)
7/23/2019 SOCKETS en java cliente servidor
25/30
omo se puede notar, tanto el cliente como el servidor hacen uso de -hreads
para un me7or mane7o de la transmisin del archivo, ya que el servidor env$a el
archivo por paquetes de un determinado tamaDo y el cliente se encar!a derecibir cada uno de estos paquetes y formar nuevamente el archivo para
almacenarlo finalmente en el path destino.
#n las fi!uras F y 4= se observan las interfaces al e7ecutar +ervidor.7ava y
liente.7ava en una misma maquina. #l servidor almacena traba7o.ppt en el path
0)GG0ocumentosGGtraba7o.ppt. #l cliente que es e7ecutado en la misma maquinadesea que el servidor le envi traba7o.ppt y lo almacene en 6)GGopia-raba7o.ppt
. "l hacer click en el botn 9niciar de la interfaz del cliente, la solicitud lle!a al
servidor quien inmediatamente realiza la transmisin al path especificado por el
cliente. "l terminar la transmisin desde el servidor al cliente, podemos verificar
que traba7o.ppt que se encontraba en 0)GG0ocumentosGGtraba7o.ppt ahora se
encuentra en 6)GGopia-raba7o.ppt , por lo que la transmisin del archivo hasido realizada satisfactoriamente.
7/23/2019 SOCKETS en java cliente servidor
26/30
Figura 1. 9nterfaz del liente de omparticin de "rchivos.
Figura . 9nterfaz del +ervidor de "rchivos.
7/23/2019 SOCKETS en java cliente servidor
27/30
.
0. (/ora un peueo c/at0. (/ora un peueo c/at
2ealizar un chat utilizando sockets, donde lienteEservidor se comuniquen
dinmicamente
7/23/2019 SOCKETS en java cliente servidor
28/30
* Los sockets son mecanismos que permiten una comunicacin sencilla
entre procesos remotos, otor!ando distintos niveles de fiabilidad de
acuerdo al tipo de socket que se use, es decir, que dependiendo de la
aplicacin y del tipo de socket que se use en ella, la comunicacin
siempre se realizar dentro de los parmetros predefinidos.
* #l uso de sockets se ha extendido debido a que han sido diseDadas para
servir en la comunicacin en el protocolo 9@ resultando eficientes al
momento de su aplicacin.
* #l uso de sockets en 8ava abstrae un con7unto de operaciones de ba7o
nivel que ba7o nivel, lo que resulta beneficioso para el pro!ramador quetan slo se enfoca en la aplicacin y la manera en la que enviar y
recibir los distintos mensa7es durante la comunicacin.
7/23/2019 SOCKETS en java cliente servidor
29/30
H4I 'uia Bee7 de ro!ramacin en 2edes
http)EE333.arrakis.esEJdmrqEbee7Etheory.html
H>I Los +ockets
http)EE333.an!elfire.comEtrekEstor3aldE+ockets.pdf
H?I -utorial de 8ava) Los +ockets
http)EE333.itapizaco.edu.mxEpa!inasE8ava-utEfroufeEparte>=Ecap>=(?.html
HKI 8oaqu$n +alvach=Ecap>=(K.html
HI +ockets in -E9 Aet3orkin!
http)EE333.net3orkdictionary.comEnet3orkin!Esockets.php
HI Los +ockets
http)EEpisuer!a.inf.ubu.esElsiE0ocenciaE-6E9-9'EicruzadnEMemoriaE>.htm
H;I omunicacin de 0atos
http)EE333.dcc.uchile.clEJ7piquerE0ocenciaEcc54cEapuntesEapuntes.html
7/23/2019 SOCKETS en java cliente servidor
30/30
(racias por su atencin