sockets en java cliente servidor

Upload: 9704181410

Post on 19-Feb-2018

244 views

Category:

Documents


0 download

TRANSCRIPT

  • 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