SlideShare una empresa de Scribd logo
1 de 15
Descargar para leer sin conexión
Programacion en red.                                  LP (Telem´tica)
                                                                                                                a
                                                   Curso 04/05                                Universitat de Val`ncia
                                                                                                                e




                                                     Tema 7

                                        Programacion en red.

                            Departament d’Inform`tica. Universitat de Val`ncia
                                                a                        e




´
Indice

1. Direcciones IP                                                                                                     1


2. UDP                                                                                                                3

   2.1. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    7


3. TCP                                                                                                                7


4. HTTP                                                                                                               10

   4.1. La clase URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

   4.2. La clase URLConnection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

   4.3. La clase HttpURLConnection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14




    Vamos a ver algunas de las clases que proporciona Java para realizar programas en los que la
informaci´n se transmita a trav´s de una red.
         o                     e

   Veremos 4 grupos de clases:




juan.gutierrez@uv.es                                                                                        P´gina: 1
                                                                                                             a
Programacion en red.                                           LP (Telem´tica)
                                                                                                                                 a
                                                           Curso 04/05                                         Universitat de Val`ncia
                                                                                                                                 e


             Las que sirven para representar una direcci´n IP.
                                                        o

             Clases que sirven para enviar informaci´n utilizando el protocolo UDP (User Datagram
                                                    o
             Protocol)

             Clases que sirven para enviar informaci´n utilizando el protocolo TCP (Transmission
                                                    o
             Control Protocol)

             Clases que sirven para trabajar con el protocolo HTTP (HyperText Transfer Protocol)




1.      Direcciones IP

     Una direcci´n IP es un n´mero sin signo de 32 bits (IPv4) o de 128 bits (IPv6).
                o            u

     Una instancia de la clase InetAddress sirve para representar una direcci´n IP.
                                                                             o

     Algunos de los m´todos que define esta clase son:
                     e



     p u b l i c s t a t i c I n e t A d d r e s s getByName ( S t r i n g h o s t ) t h r o w s UnknownHostException



                Devuelve un objeto del tipo InetAddress a partir del nombre.



     p u b l i c byte [ ] getAddress ( )



                Devuelve la direcci´n IP en un vector de byte.
                                   o



     p u b l i c s t a t i c I n e t A d d r e s s [ ] getAllByName ( S t r i n g h o s t ) t h r o w s UnknownHostException



                Dado un nombre de servidor, devuelve un vector con todas sus direcciones IP. El nombre puede
                ser un nombre de m´quina, como por ejemplo sweb.uv.e o una representaci´n textual de su
                                   a                                                         o
                direcci´n IP como por ejemplo 147.156.16.46
                       o


     p u b l i c s t a t i c InetAddress getLocalHost ()



                Devuelve la direcci´n de la m´quina local.
                                   o         a

     El siguiente c´digo muestra un ejemplo de aplicaci´n de esta clase:
                   o                                   o


juan.gutierrez@uv.es                                                                                                           P´gina: 2
                                                                                                                                a
Programacion en red.                                               LP (Telem´tica)
                                                                                                                                              a
                                                                    Curso 04/05                                             Universitat de Val`ncia
                                                                                                                                              e




import java . net . ∗ ;

public c la ss DireccionesIP {

     p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
          byte [ ] b ;
          try {
                // S i s e pasa un argumento obtenemos l a d i r e c c i o n IP
                i f ( a r g s . l e n g t h >0){
                     String host = args [ 0 ] ;
                     I n e t A d d r e s s [ ] d i r e c c i o n e s = I n e t A d d r e s s . getAllByName ( h o s t ) ;

                    f o r ( i n t i =0; i <d i r e c c i o n e s . l e n g t h ; i ++){
                         System . out . p r i n t l n ( d i r e c c i o n e s [ i ] ) ;
                    }
               }
               // S i no obtenemos l a d i r e c c i o n IP de l a maquina l o c a l
               else {
                  InetAddress d i r e c c i o n = InetAddress . getLocalHost () ;
                  System . out . p r i n t l n ( d i r e c c i o n ) ;
               }


         } catch ( Exception e ) {
             e . printStackTrace () ;
         }

     }
}




2.       UDP

   Es un protocolo de la capa de transporte que las aplicaciones pueden utilizar para enviar paquetes
de datos.

   UDP soporta la especificaci´n de un n´mero de puerto por lo que puede ser utilizado para enviar
                              o           u
datagramas a aplicaciones o servicios especificos.


         Inconvenientes: no garantiza la entrega de los paquetes ni que ´stos lleguen en el orden en el
                                                                        e
         que han sido enviados.
         Ventajas: Es eficiente, causa poca sobrecarga, es conveniente para aplicaciones en tiempo real
         y un socket UDP puede recibir datos de diferentes m´quinas.
                                                            a


     Java proporciona dos clases para el trabajo con el protocolo UDP:


         java.net.DatagramPacket

         java.net.DatagramSocket


    La clase DatagramPacket representa un paquete de datos que va a ser enviado o recibido utilizando
el protocolo UDP. Los paquetes contienen datos, una direcci´n IP y un n´mero de puerto.
                                                           o             u

juan.gutierrez@uv.es                                                                                                                    P´gina: 3
                                                                                                                                         a
Programacion en red.                                           LP (Telem´tica)
                                                                                                                                  a
                                                            Curso 04/05                                         Universitat de Val`ncia
                                                                                                                                  e



   Hay dos situaciones en las que se debe crear un objeto del tipo DatagramPacket:


      para enviar un paquete a una m´quina remota utilizando UDP (la direcci´n IP y el puerto se
                                     a                                      o
      refieren a la m´quina destino).
                    a
      para recibir un paquete enviado por una m´quina remota utilizando UDP (la direcci´n IP y el
                                               a                                       o
      n´mero de puerto se refieren a la m´quina que ha enviado el paquete).
       u                                a


   Esta clase dispone de varios constructores (solo se muestran algunos):



   DatagramPacket ( b y t e [ ] buf , i n t l o n g )



                Crea un paquete UDP para recibir paquetes de longitud long, almacenando los datos en buf.



   DatagramPacket ( b y t e [ ] buf , i n t l o n g , I n e t A d d r e s s d i r e c c , i n t p u e r t o )



                Construye un paquete UDP para enviar la informaci´n contenida en buf cuya longitud es long
                                                                 o
                a la m´quina y puertos especificados
                      a

   Algunos de los m´todos que ofrece esta clase son:
                   e



    p u b l i c InetAddress getAddress ( )



                Devuelve la direcci´n IP asociada al paquete UDP.
                                   o




    p u b l i c b y t e [ ] getData ( )



                Devuelve el buffer con los datos.




    p u b l i c i n t getLength ( )



                Devuelve el n´mero de bytes almacenado en el datagrama. Este n´mero puede ser menor que
                             u                                                u
                el tama˜o del buffer.
                       n



    p u b l i c void setAddress ( InetAddress dir )



juan.gutierrez@uv.es                                                                                                        P´gina: 4
                                                                                                                             a
Programacion en red.                         LP (Telem´tica)
                                                                                                           a
                                                       Curso 04/05                       Universitat de Val`ncia
                                                                                                           e


                Sirve para asignar una direcci´n IP al paquete UDP.
                                              o




    p u b l i c setData ( byte [ ] b u f f e r )



                Asigna nuevos datos al paquete UDP.




    p u b l i c setLength ( i n t long )



                Sirve para asignar la longitud real de los datos que contiene el paquete UDP. Este n´mero
                                                                                                    u
                deber ser menor o igual que el tama˜o del buffer.
                                                    n

  La clase DatagramSocket representa un socket UDP para permitir el env´ y recepci´n de paquetes
                                                                       ıo         o
UDP.

   Una misma instancia de la clase DatagramSocket puede ser utilizada tnto para recibir paquetes como
para enviarlos.

   La clase DatagramSocket proporciona entre otros los siguientes constructores:



   DatagramSocket ( )



                Contruye un socket para el trabajo con paquetes UDP y le asigna un puerto libre en la m´quina
                                                                                                       a
                local.




   DatagramSocket ( i n t p u e r t o )



                Contruye un socket para el trabajo con paquetes UDP y le asigna el puerto especificado.


   Algunos de los m´todos que ofrece esta clase son:
                   e



    p u b l i c v o i d send ( DatagramPacket datagrama ) t h r o w s IOException



                Env´ el datagrama UDP.
                   ıa




juan.gutierrez@uv.es                                                                                 P´gina: 5
                                                                                                      a
Programacion en red.                         LP (Telem´tica)
                                                                                                                        a
                                                                    Curso 04/05                       Universitat de Val`ncia
                                                                                                                        e




     p u b l i c v o i d r e c e i v e ( DatagramPacket datagrama ) t h r o w s IOException



                   Espera a que llegue un paquete UDP y lo almacena en el DatagramPacket pasado como argu-
                   mento. Una vez recibido, los datos sobre la direcci´n y puerto ser´n los correspondientes a la
                                                                      o              a
                   m´quina origen. Si no se ha establecido el tiempo de espera, este m´todo bloquea la ejecuci´n
                     a                                                                 e                      o
                   del programa hasta que se reciba el paquete UDP.




     p u b l i c void s e t R e c e i v e B u f f e r S i z e ( i n t long ) throws SocketException



                   Establece el tama˜o del buffer para los paquetes UDP de entrada. Si este valor es peque˜o y
                                    n                                                                    n
                   llegan muchos paquetes UDP en un corto espacio de tiempo es posible que alguno de ellos se
                   pierda.


     p u b l i c void s e t S e n d B u f f e r S i z e ( i n t long ) throws SocketException



                   Establece el tama˜o del buffer para los datagramas UDP de salida.
                                    n




     p u b l i c v o i d setSoTimeout ( i n t d u r a c i o n )



                   Establece el tiempo de espera del socket. El valor es el n´mero de milisegundos que el m´todo
                                                                             u                             e
                   receive() se esperar´ antes de lanzar una excepci´n del tipo SocketTimeoutException.
                                       a                            o




     public void close ()



                   Cierra el socket y libera el puerto.


   La estructura b´sica que debe tener una aplicaci´n para la creaci´n y el env´ de paquetes UDP
                    a                              o                o          ıo
se muestra en el siguiente c´digo.
                            o

DatagramSocket s o c k e t = new DatagramSocket ( ) ;
DatagramPacket p a q u e t e = new DatagramPacket ( new b y t e [ 1 0 2 4 ] , 1 0 2 4 ) ;

p a q u e t e . s e t A d d r e s s ( I n e t A d d r e s s . getByName ( maquina ) ) ;
paquete . s etPor t (2000) ;

boolean f i n a l i z a r = f a l s e ;

while ( ! f i n a l i z a r ){
   // A s ign ar l o s d a t o s a l b u f f e r d e l p a q u e t e UDP
   ...
   s o c k e t . send ( p a q u e t e ) ;


juan.gutierrez@uv.es                                                                                              P´gina: 6
                                                                                                                   a
Programacion en red.                     LP (Telem´tica)
                                                                                                              a
                                                              Curso 04/05                   Universitat de Val`ncia
                                                                                                              e



     ...
}

socket . close () ;



    La estructura b´sica que debe tener una aplicaci´n para la recepci´n de paquetes UDP a trav´s
                   a                                o                 o                        e
del puerto 2000 se muestra en el siguiente c´digo.
                                            o

DatagramSocket s o c k e t = new DatagramSocket ( 2 0 0 0 ) ;
DatagramPacket p a q u e t e = new DatagramPacket ( new b y t e [ 1 0 2 4 ] , 1 0 2 4 ) ;

boolean f i n a l i z a r = f a l s e ;

while ( ! f i n a l i z a r ){
   s o c k e t . r e c e i v e ( paquete ) ;

     // E x t r a e r l o s d a t o s d e l p a q u e t e UDP
     ...

}

socket . close () ;



   Al procesar el paquete la aplicaci´n debe trabajar con el array de bytes que contiene los datos.
                                      o
Sin embargo, a partir de los datos es posible construir un ByteArrayInputStream y utilizar ´ste para
                                                                                           e
obtener un flujo de entrada filtrado.


2.1.       Ejemplo

    Supongamos que para monitorizar durante 40 segundos la trayectoria seguida por un cohete durante
su lanzamiento, se obtienen datos enviados desde el cohete y datos de diversas estaciones de radar. Cada
estaci´n de radar proporciona datos cada 100 milisegundos y los datos del cohete est´n disponibles
      o                                                                                   a
cada 20 milisegundos. Todos estos datos deben ser enviados a una m´quina encargada de procesarlos
                                                                       a
y almacenarlos.

    Vamos a suponer que los datos que env´ el cohete son: velocidad horizontal y vertical, altitud y
                                            ıa
temperatura. Cada estaci´n de radar proporciona a su vez el dato de la distancia a la que se encuentra
                          o
el cohete respecto de la estaci´n de radar.
                               o

    En el directorio Ejemplos/UDP/Cohete hay una serie de clases que permiten realizar una simulaci´n
                                                                                                   o
utilizando 20 estaciones de radar.

   Los datos que proporciona esta simulaci´n no son realistas ya que la parte relevante es la cons-
                                           o
trucci´n, env´ y obtenci´n de los paquetes UDP.
      o      ıo         o



3.         TCP

   Es un protocolo de la capa de transporte que las aplicaciones pueden utilizar para enviar paquetes
de datos y que garantiza la entrega en el mismo orden en el que se han enviado.

juan.gutierrez@uv.es                                                                                    P´gina: 7
                                                                                                         a
Programacion en red.                                                  LP (Telem´tica)
                                                                                                                                                a
                                                                   Curso 04/05                                                Universitat de Val`ncia
                                                                                                                                                e



   Desde el punto de vista de la aplicaci´n, TCP transfiere un flujo continuo de bytes (por lo que se
                                         o
pueden utilizar los flujos de Entrada/Salida) a trav´s de Internet. La aplicaci´n no ha de preocuparse
                                                   e                          o
de dividir los datos en bloques.

    El coste de la garant´ de entrega y de la ordenaci´n de los datos es la reducci´n del rendimiento
                         ıa                           o                            o
en la red.

   Java proporciona dos clases para el trabajo con el protocolo TCP:


       java.net.Socket

       java.net.ServerSocket


   La clase Socket se utiliza para crear el cliente que se conecta a un determinado servicio.

   La clase ServerSocket se utiliza para crear el servidor asociado a un puerto.

   La clase Socket representa un canal de comunicaci´n entre dos puertos de comunicaci´n TCP que
                                                    o                                 o
pertenecen a una o dos m´quinas. Un socket TCP no puede comunicar m´s de dos m´quinas.
                         a                                             a          a

   Si se requiere esta funcionalidad el cliente debe establecer m´ltiples conexiones, una por cada
                                                                 u
m´quina.
 a

   Esta clase ofrece diversos constructores entre los que cabe destacar:



    Socket ( InetAddress dir , i n t puerto )



                  Crea un socket conectado a la IP y puerto especificados.




    Socket ( InetAddress dir , i n t puerto , InetAddress l o c a l d i r , i n t puertoLocal )



                  Crea un socket conectado la IP y puerto especificados y es asociado a la IP local y al puerto
                  proporcionados.



    S o c k e t ( S t r i n g maquina , i n t p u e r t o )



                  Crea un socket conectado la m´quina y puerto especificados.
                                               a




    S o c k e t ( S t r i n g maquina , i n t p u e r t o , I n e t A d d r e s s l o c a l , i n t p u e r t o L o c a l )



juan.gutierrez@uv.es                                                                                                                      P´gina: 8
                                                                                                                                           a
Programacion en red.                                            LP (Telem´tica)
                                                                                                                                            a
                                                                     Curso 04/05                                          Universitat de Val`ncia
                                                                                                                                            e


                  Crea un socket conectado la maquina y puerto especificados y es asociado a la IP local y al
                  puerto proporcionados.

   Una vez que se ha creado el socket las operaciones habituales que se pueden realizar con el objeto
son: leer informaci´n, enviar datos, establecer opciones y cerrar la conexi´n.
                   o                                                       o

   Vamos a ver cuales son algunos de los m´todos que ofrece esta clase.
                                          e



    p u b l i c OutputStream getOutputStream ( ) t h r o w s IOException



                  Devuelve un flujo de salida que se puede utilizar para escribir datos que se env´ a la aplicaci´n
                                                                                                 ıan            o
                  a la que est´ conectado este socket.
                              a




    p u b l i c InputStream g e t I n p u t S t r e a m ( ) t h r o w s IOException



                  Devuelve un flujo de entrada que se puede utilizar para leer datos de se reciben de la aplicaci´n
                                                                                                                o
                  a la que est´ conectado este socket.
                              a



    p u b l i c v o i d s e t R e c e i v e B u f f e r S i z e ( i n t tam ) t h r o w s S o c k e t E x c e p t i o n



                  Asigna a la opci´n SO RCVBUF el valor especificado. Esta opci´n es utilizada para establecer
                                  o                                               o
                  el tama˜o del buffer de red para la entrada.
                         n
                  Para conocer el valor por defecto se puede utilizar getReceiveBufferSize().
                  La llamada a este m´todo se debe realizar realizar antes de conectar el socket.
                                      e




    p u b l i c v o i d s e t S e n d B u f f e r S i z e ( i n t tam ) t h r o w s S o c k e t E x c e p t i o n



                  Asigna a la opci´n SO SNDBUF el valor especificado. Esta opci´n es utilizada para establecer
                                  o                                              o
                  el tama˜o del buffer de red para la salida.
                         n
                  Para conocer el valor por defecto se puede utilizar getSendBufferSize().


    p u b l i c v o i d setSoTimeout ( i n t d u r a c i o n ) t h r o w s S o c k e t E x c e p t i o n



                  Establece el valor de la opci´n SO TIMEOUT que controla el tiempo en milisegundos que
                                                o
                  bloquear´n las operaciones de lectura. Un valor de cero bloquea de forma indefinida, en otro
                           a
                  caso al transcurrir el tiempo especificado y no recibir datos, se lanza una excepci´n del tipo
                                                                                                    o
                  SocketTimeoutException.




juan.gutierrez@uv.es                                                                                                                  P´gina: 9
                                                                                                                                       a
Programacion en red.                                   LP (Telem´tica)
                                                                                                                              a
                                                                Curso 04/05                                 Universitat de Val`ncia
                                                                                                                              e




    p u b l i c v o i d setTcpNoDelay ( b o o l e a n f l a g ) t h r o w s S o c k e t E x c e p t i o n



                 Establece el valor de la opci´n TCP NODELAY que determina si se debe utilizar el algoritmo
                                              o
                 de Nagle. 1



    p u b l i c v o i d shutdownInput ( ) t h r o w s IOException



                 Cierra el flujo de entrada de el socket, de forma que las operaciones de lectura devolver´n el
                                                                                                         a
                 marcador de final de fichero.



    p u b l i c v o i d shutdownOutput ( ) t h r o w s IOException



                 Cierra el flujo de salida de el socket, de forma que las operaciones de escritura lanzar´n una
                                                                                                        a
                 excepci´n del tipo IOException.
                        o



    p u b l i c v o i d c l o s e ( ) t h r o w s IOException



                 Cierra el socket. Una vez cerrado, no se puede volver a conectar. Se necesitar´ crear un nuevo
                                                                                               ıa
                 socket.

   Para el resto de m´todos consultad el API.
                     e

   En cuanto a la clase ServerSocket el constructor m´s sencillo es:
                                                     a



    S e r v e r S o c k e t ( i n t p u e r t o ) t h r o w s IOException



                 Crea un socket servidor asociado al puerto que se pasa como argumento de forma que los
                 clientes puedan localizar el servicio TCP que ofrece. Si el puerto ya est´ asociado se lanza una
                                                                                          a
                 excepci´n.
                         o

   Una vez que se tiene un objeto de este tipo, se puede obtener un Socket para modelar la conexi´n
                                                                                                 o
entre el cliente y el servidor mediante el m´todo:
                                            e



    p u b l i c S o c k e t a c c e p t ( ) t h r o w s IOException



                 Espera a que el socket cliente realice una petici´n de conexi´n y devuelve el socket correspon-
                                                                  o           o
                 diente. Es una operaci´n que bloquea hasta que no se produzca una conexi´n (a no ser que se
                                       o                                                     o
                 haya establecido la opci´n SO TIMEOUT
                                         o


juan.gutierrez@uv.es                                                                                                   P´gina: 10
                                                                                                                        a
Programacion en red.                                            LP (Telem´tica)
                                                                                                                                        a
                                                                 Curso 04/05                                          Universitat de Val`ncia
                                                                                                                                        e



     Para el resto de m´todos consultad el API.
                       e

     En el directorio Ejemplos/TCP hay un ejemplo de uso de estas clases.



4.       HTTP

4.1.      La clase URL

   Esta clase sirve para representar uno de los tipos m´s usados de direcci´n en Internet: el Uniform
                                                       a                   o
Resource Locator.

    Las direcciones URL pueden referirse a ficheros, sitios Web, sitios FTP, direcciones de correo
electr´nico, etc.
      o

     La estructura de estas direcciones es:



                          protocolo          : //      hostname            (: puerto)          ruta     (#ref erencia)



     La clase URL dispone de varios constructores entre los que cabe destacar:



     URL( S t r i n g cadena ) t h r o w s MalformedException



                  Crea un objeto URL a partir de la direcci´n pasada en forma de String.
                                                           o



     URL( S t r i n g p r o t o c o l o , S t r i n g host , S t r i n g   f i l e ) t h r o w s MalformedException



                  Crea un objeto URL a partir del protocolo, la m´quina y el recurso pasados en forma de String.
                                                                 a



     URL( S t r i n g p r o t o c o l o , S t r i n g host , i n t p u e r t o , S t r i n g   f i l e ) t h r o w s MalformedException



                  Crea un objeto URL a partir del protocolo, la m´quina y el recurso pasados en forma de String,
                                                                 a
                  y el puerto pasado como un entero.



     URL(URL c o n t e x t o , S t r i n g r e l a t i v o ) t h r o w s MalformedException




juan.gutierrez@uv.es                                                                                                              P´gina: 11
                                                                                                                                   a
Programacion en red.                                           LP (Telem´tica)
                                                                                                                                a
                                                          Curso 04/05                                         Universitat de Val`ncia
                                                                                                                                e



               Crea un objeto URL a partir una ruta relativa a la URL pasada como primer argumento.



   URL( S t r i n g p r o t o c o l , S t r i n g host , i n t po rt , S t r i n g f i l e , URLStreamHandler h a n d l e r )   throws
         MalformedException



               Crea un objeto URL donde se especifica un objeto para manejar el protocolo que se utilizar´ du-
                                                                                                        a
               rante la conexi´n. Por ejemplo un manejador de protocolo HTTP conoce c´mo comunicarse
                              o                                                            o
               con un servidor HTTP y un manejador de protocolo FTP conoce c´mo comunicarse con un
                                                                                   o
               servidor FTP. Si se va a utilizar un protocolo que no est´ implementado, se debe proporcional
                                                                        a
               el URLStreamHandler

   Algunos de los m´todos de los que dispone esta clase son:
                   e



    String getProtocol ()



               Devuelve el protocolo asociado al URL



    String getHost ( )



               Devuelve la m´quina asociada al URL
                            a



    i n t getPort ()



               Devuelve el puerto asociado al URL



   URLConnection openConnection ( ) t h r o w s IOException



               Devuelve un objet URLConnection que representa una conexi´n con el recurso remoto al que
                                                                        o
               hace referencia el objeto URL.



   InputStream openStream ( ) t h r o w s IOException



               Abre una conexi´n con el URL y devuelve un objeto del tipo InputStream para leer a trav´s
                                o                                                                     e
               de esa conexi´n.
                            o

   Si se necesita controlar la forma en la que realiza la petici´n del recurso se debe utilizar el m´todo
                                                                o                                   e
openConnection(). Si lo unico que se desea hacer es leer el recurso se puede utilizarn openStream().
                        ´


juan.gutierrez@uv.es                                                                                                        P´gina: 12
                                                                                                                             a
Programacion en red.                 LP (Telem´tica)
                                                                                                                  a
                                                                      Curso 04/05               Universitat de Val`ncia
                                                                                                                  e



4.2.       La clase URLConnection

   La clase URLConnection es la superclase abstracta de todas las clases que representan la comunicaci´n
                                                                                                      o
entre la aplicaci´n y un URL.
                 o

   Un objeto de este tipo se puede utilizar para leer desde y para escribir hacia el el recurso al que
hace referencia el objeto URL.

      En general la creaci´n de una conexi´n implica los siguientes pasos:
                          o               o


 1.      Se obtiene un objeto URLConnection utilizando el m´todo openConnection() de un objeto URL.
                                                           e
 2.      Se establecen los par´metros y las propiedades de la petici´n.
                              a                                     o
 3.      Se establece la conexi´n utilizando el m´todo connect()
                               o                 e
 4.      Se puede obtener informaci´n sobre la cabecera o/y obtener el recurso remoto.
                                   o


      Algunos de los m´todos de esta clase son:
                      e



      v o i d c o n n e c t ( ) t h r o w s IOException



                    Establece una conexi´n entre la aplicaci´n (el cliente) y el recurso (servidor). Antes de invocar
                                         o                  o
                    a este m´todo la aplicaci´n puede especificar las propiedades de la cabecera de la petici´n.
                            e                o                                                                 o



      i n t getContentLength ( )



                    Devuelve el valor del campo de cabecera content-length o -1 si no est´ definido.
                                                                                         a



      S t r i n g getContentType ( )



                    Devuelve el valor del campo de cabecera content-type o null si no est´ definido.
                                                                                         a



      S t r i n g g e t H e a d e r F i e l d ( S t r i n g campo )



                    Devuelve el valor del campo de cabecera especificado o null si no est´ definido.
                                                                                        a



      OutputStream getOutputStream ( ) t h r o w s IOException



juan.gutierrez@uv.es                                                                                       P´gina: 13
                                                                                                            a
Programacion en red.                     LP (Telem´tica)
                                                                                                                      a
                                                                      Curso 04/05                   Universitat de Val`ncia
                                                                                                                      e


                  Devuelve un objeto OutputStream para escribir datos en esta conexi´n.
                                                                                    o




   InputStream g e t I n p u t S t r e a m ( ) t h r o w s IOException



                  Devuelve un objeto InputStream para leer datos de esta conexi´n.
                                                                               o



    v o i d s e t R e q u e s t P r o p e r t y ( S t r i n g key , S t r i n g v a l u e )



                  Establece una propiedad de la petici´n. Por ejemplo:
                                                      o
                                       ¨
                  setRequestProperty ( User-agent”, .agente”);




4.3.     La clase HttpURLConnection

   Es una subclase de URLConnection que soporta caracter´
                                                        ısticas propias del protocolo HTTP.

   Esta clase no tiene constructor, la forma de obtener una referencia a un objeto de este tipo es:



   URL d i r e c c i o n = new URL( d i r ) ;
   URLConnection c o n e x i o n = u r l . openConnection ( ) ;

   // Comprobamos su t i p o
   i f ( c o n e x i o n i n s t a n c e o f HttpURLConnection ) {

         // Se r e a l i z a un c a s t
         HttpURLConnection conexionHTTP = ( HttpURLConnection ) c o n e x i o n ;

         // Resto d e l c o d i g o
   }



   Algunos de los m´todos que define esta clase (adem´s de los de URLConnection) son:
                   e                                a



    void disconnect ()



                  Si la conexi´n con el servidor Web est´ activa se cierra
                              o                         a



    v o i d setRequestMethod ( S t r i n g metodo ) t h r o w s P r o t o c o l E x c e p t i o n




juan.gutierrez@uv.es                                                                                           P´gina: 14
                                                                                                                a
Programacion en red.                            LP (Telem´tica)
                                                                                                      a
                                               Curso 04/05                          Universitat de Val`ncia
                                                                                                      e


             Establece el m´todo de petici´n que se utilizar´ en esta conexi´n (POST, GET, HEAD,...)
                            e               o                a              o
             Debe ser utilizado antes de llamar a connect().



    boolean usingProxy ( )



             Muestra si se est´ utilizando un servidor proxy para la conexi´n.
                              a                                            o



    i n t getResponseCode ( )



             Obtiene el c´digo de estado del mensaje de respuesta HTTP. Por ejemplo para las siguientes
                          o
             l´
              ıneas de estado:
                    HTTP/1.0 200 OK
                    HTTP/1.0 401 Unauthorized
             Se obtendr´ 200 y 401 respectivamente.
                        ıa
             Devuelve -1 si no se puede obtener el c´digo a partir de la respuesta.
                                                    o




juan.gutierrez@uv.es                                                                           P´gina: 15
                                                                                                a

Más contenido relacionado

Similar a Tema7

Tcp Ip Diapositiva
Tcp Ip DiapositivaTcp Ip Diapositiva
Tcp Ip Diapositivaguest385913
 
Demo curso-tcp-ip
Demo curso-tcp-ipDemo curso-tcp-ip
Demo curso-tcp-ipCarlosRPC
 
Revista Digital Redes II
Revista Digital Redes IIRevista Digital Redes II
Revista Digital Redes IICristian Calva
 
Modelo tcp ip
Modelo tcp ipModelo tcp ip
Modelo tcp ipingangelp
 
Práctica 3 conectividad entre linux y windows
Práctica 3 conectividad entre linux y windowsPráctica 3 conectividad entre linux y windows
Práctica 3 conectividad entre linux y windowsJuan Anaya
 
Clase 5 telecomunicaciones
Clase 5 telecomunicacionesClase 5 telecomunicaciones
Clase 5 telecomunicacionesJarvey Gonzalez
 
Los Protocolos Tcp Ip
Los Protocolos Tcp IpLos Protocolos Tcp Ip
Los Protocolos Tcp Ipguest6db87c2
 
TP OBLIGATORIO WireShark Intro + ARP.pdf
TP OBLIGATORIO WireShark Intro + ARP.pdfTP OBLIGATORIO WireShark Intro + ARP.pdf
TP OBLIGATORIO WireShark Intro + ARP.pdfJavierRamirez651634
 
Práctica 3 - Redes inalámbricas
Práctica 3 - Redes inalámbricasPráctica 3 - Redes inalámbricas
Práctica 3 - Redes inalámbricasGrecia Martinez
 
modelotcpip-090421082232-phpapp01.pdf
modelotcpip-090421082232-phpapp01.pdfmodelotcpip-090421082232-phpapp01.pdf
modelotcpip-090421082232-phpapp01.pdfFabioReneCahuanaMend
 
Modelotcpip 090421082232-phpapp01
Modelotcpip 090421082232-phpapp01Modelotcpip 090421082232-phpapp01
Modelotcpip 090421082232-phpapp01carlos salguero
 
Muestreo y procesamientopdf
Muestreo y procesamientopdfMuestreo y procesamientopdf
Muestreo y procesamientopdfJeisson Saavedra
 
Enrutamiento rip redes
Enrutamiento rip redesEnrutamiento rip redes
Enrutamiento rip redesRaul Lopez
 
Curso de protocolos tcp ip (z-lib.org)
Curso de protocolos tcp   ip (z-lib.org)Curso de protocolos tcp   ip (z-lib.org)
Curso de protocolos tcp ip (z-lib.org)FranciscoManuelAvila1
 
Programación en lab view basica en español
Programación en lab view basica   en españolProgramación en lab view basica   en español
Programación en lab view basica en españolRodrigo_98
 

Similar a Tema7 (20)

Tcp Ip Diapositiva
Tcp Ip DiapositivaTcp Ip Diapositiva
Tcp Ip Diapositiva
 
Demo curso-tcp-ip
Demo curso-tcp-ipDemo curso-tcp-ip
Demo curso-tcp-ip
 
Direcciones de Internet
Direcciones de InternetDirecciones de Internet
Direcciones de Internet
 
Revista Digital Redes II
Revista Digital Redes IIRevista Digital Redes II
Revista Digital Redes II
 
Modelo tcp ip
Modelo tcp ipModelo tcp ip
Modelo tcp ip
 
3. guia sistemas modelo osi y tcp
3. guia sistemas modelo osi y tcp3. guia sistemas modelo osi y tcp
3. guia sistemas modelo osi y tcp
 
Práctica 3 conectividad entre linux y windows
Práctica 3 conectividad entre linux y windowsPráctica 3 conectividad entre linux y windows
Práctica 3 conectividad entre linux y windows
 
Clase 5 telecomunicaciones
Clase 5 telecomunicacionesClase 5 telecomunicaciones
Clase 5 telecomunicaciones
 
Modelo TCP/IP
Modelo TCP/IPModelo TCP/IP
Modelo TCP/IP
 
Los Protocolos Tcp Ip
Los Protocolos Tcp IpLos Protocolos Tcp Ip
Los Protocolos Tcp Ip
 
TP OBLIGATORIO WireShark Intro + ARP.pdf
TP OBLIGATORIO WireShark Intro + ARP.pdfTP OBLIGATORIO WireShark Intro + ARP.pdf
TP OBLIGATORIO WireShark Intro + ARP.pdf
 
Práctica 3 - Redes inalámbricas
Práctica 3 - Redes inalámbricasPráctica 3 - Redes inalámbricas
Práctica 3 - Redes inalámbricas
 
modelotcpip-090421082232-phpapp01.pdf
modelotcpip-090421082232-phpapp01.pdfmodelotcpip-090421082232-phpapp01.pdf
modelotcpip-090421082232-phpapp01.pdf
 
Modelotcpip 090421082232-phpapp01
Modelotcpip 090421082232-phpapp01Modelotcpip 090421082232-phpapp01
Modelotcpip 090421082232-phpapp01
 
Modelo tcp oscar
Modelo tcp oscarModelo tcp oscar
Modelo tcp oscar
 
Muestreo y procesamientopdf
Muestreo y procesamientopdfMuestreo y procesamientopdf
Muestreo y procesamientopdf
 
Enrutamiento rip redes
Enrutamiento rip redesEnrutamiento rip redes
Enrutamiento rip redes
 
Ensayo
EnsayoEnsayo
Ensayo
 
Curso de protocolos tcp ip (z-lib.org)
Curso de protocolos tcp   ip (z-lib.org)Curso de protocolos tcp   ip (z-lib.org)
Curso de protocolos tcp ip (z-lib.org)
 
Programación en lab view basica en español
Programación en lab view basica   en españolProgramación en lab view basica   en español
Programación en lab view basica en español
 

Tema7

  • 1. Programacion en red. LP (Telem´tica) a Curso 04/05 Universitat de Val`ncia e Tema 7 Programacion en red. Departament d’Inform`tica. Universitat de Val`ncia a e ´ Indice 1. Direcciones IP 1 2. UDP 3 2.1. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3. TCP 7 4. HTTP 10 4.1. La clase URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 4.2. La clase URLConnection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.3. La clase HttpURLConnection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Vamos a ver algunas de las clases que proporciona Java para realizar programas en los que la informaci´n se transmita a trav´s de una red. o e Veremos 4 grupos de clases: juan.gutierrez@uv.es P´gina: 1 a
  • 2. Programacion en red. LP (Telem´tica) a Curso 04/05 Universitat de Val`ncia e Las que sirven para representar una direcci´n IP. o Clases que sirven para enviar informaci´n utilizando el protocolo UDP (User Datagram o Protocol) Clases que sirven para enviar informaci´n utilizando el protocolo TCP (Transmission o Control Protocol) Clases que sirven para trabajar con el protocolo HTTP (HyperText Transfer Protocol) 1. Direcciones IP Una direcci´n IP es un n´mero sin signo de 32 bits (IPv4) o de 128 bits (IPv6). o u Una instancia de la clase InetAddress sirve para representar una direcci´n IP. o Algunos de los m´todos que define esta clase son: e p u b l i c s t a t i c I n e t A d d r e s s getByName ( S t r i n g h o s t ) t h r o w s UnknownHostException Devuelve un objeto del tipo InetAddress a partir del nombre. p u b l i c byte [ ] getAddress ( ) Devuelve la direcci´n IP en un vector de byte. o p u b l i c s t a t i c I n e t A d d r e s s [ ] getAllByName ( S t r i n g h o s t ) t h r o w s UnknownHostException Dado un nombre de servidor, devuelve un vector con todas sus direcciones IP. El nombre puede ser un nombre de m´quina, como por ejemplo sweb.uv.e o una representaci´n textual de su a o direcci´n IP como por ejemplo 147.156.16.46 o p u b l i c s t a t i c InetAddress getLocalHost () Devuelve la direcci´n de la m´quina local. o a El siguiente c´digo muestra un ejemplo de aplicaci´n de esta clase: o o juan.gutierrez@uv.es P´gina: 2 a
  • 3. Programacion en red. LP (Telem´tica) a Curso 04/05 Universitat de Val`ncia e import java . net . ∗ ; public c la ss DireccionesIP { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { byte [ ] b ; try { // S i s e pasa un argumento obtenemos l a d i r e c c i o n IP i f ( a r g s . l e n g t h >0){ String host = args [ 0 ] ; I n e t A d d r e s s [ ] d i r e c c i o n e s = I n e t A d d r e s s . getAllByName ( h o s t ) ; f o r ( i n t i =0; i <d i r e c c i o n e s . l e n g t h ; i ++){ System . out . p r i n t l n ( d i r e c c i o n e s [ i ] ) ; } } // S i no obtenemos l a d i r e c c i o n IP de l a maquina l o c a l else { InetAddress d i r e c c i o n = InetAddress . getLocalHost () ; System . out . p r i n t l n ( d i r e c c i o n ) ; } } catch ( Exception e ) { e . printStackTrace () ; } } } 2. UDP Es un protocolo de la capa de transporte que las aplicaciones pueden utilizar para enviar paquetes de datos. UDP soporta la especificaci´n de un n´mero de puerto por lo que puede ser utilizado para enviar o u datagramas a aplicaciones o servicios especificos. Inconvenientes: no garantiza la entrega de los paquetes ni que ´stos lleguen en el orden en el e que han sido enviados. Ventajas: Es eficiente, causa poca sobrecarga, es conveniente para aplicaciones en tiempo real y un socket UDP puede recibir datos de diferentes m´quinas. a Java proporciona dos clases para el trabajo con el protocolo UDP: java.net.DatagramPacket java.net.DatagramSocket La clase DatagramPacket representa un paquete de datos que va a ser enviado o recibido utilizando el protocolo UDP. Los paquetes contienen datos, una direcci´n IP y un n´mero de puerto. o u juan.gutierrez@uv.es P´gina: 3 a
  • 4. Programacion en red. LP (Telem´tica) a Curso 04/05 Universitat de Val`ncia e Hay dos situaciones en las que se debe crear un objeto del tipo DatagramPacket: para enviar un paquete a una m´quina remota utilizando UDP (la direcci´n IP y el puerto se a o refieren a la m´quina destino). a para recibir un paquete enviado por una m´quina remota utilizando UDP (la direcci´n IP y el a o n´mero de puerto se refieren a la m´quina que ha enviado el paquete). u a Esta clase dispone de varios constructores (solo se muestran algunos): DatagramPacket ( b y t e [ ] buf , i n t l o n g ) Crea un paquete UDP para recibir paquetes de longitud long, almacenando los datos en buf. DatagramPacket ( b y t e [ ] buf , i n t l o n g , I n e t A d d r e s s d i r e c c , i n t p u e r t o ) Construye un paquete UDP para enviar la informaci´n contenida en buf cuya longitud es long o a la m´quina y puertos especificados a Algunos de los m´todos que ofrece esta clase son: e p u b l i c InetAddress getAddress ( ) Devuelve la direcci´n IP asociada al paquete UDP. o p u b l i c b y t e [ ] getData ( ) Devuelve el buffer con los datos. p u b l i c i n t getLength ( ) Devuelve el n´mero de bytes almacenado en el datagrama. Este n´mero puede ser menor que u u el tama˜o del buffer. n p u b l i c void setAddress ( InetAddress dir ) juan.gutierrez@uv.es P´gina: 4 a
  • 5. Programacion en red. LP (Telem´tica) a Curso 04/05 Universitat de Val`ncia e Sirve para asignar una direcci´n IP al paquete UDP. o p u b l i c setData ( byte [ ] b u f f e r ) Asigna nuevos datos al paquete UDP. p u b l i c setLength ( i n t long ) Sirve para asignar la longitud real de los datos que contiene el paquete UDP. Este n´mero u deber ser menor o igual que el tama˜o del buffer. n La clase DatagramSocket representa un socket UDP para permitir el env´ y recepci´n de paquetes ıo o UDP. Una misma instancia de la clase DatagramSocket puede ser utilizada tnto para recibir paquetes como para enviarlos. La clase DatagramSocket proporciona entre otros los siguientes constructores: DatagramSocket ( ) Contruye un socket para el trabajo con paquetes UDP y le asigna un puerto libre en la m´quina a local. DatagramSocket ( i n t p u e r t o ) Contruye un socket para el trabajo con paquetes UDP y le asigna el puerto especificado. Algunos de los m´todos que ofrece esta clase son: e p u b l i c v o i d send ( DatagramPacket datagrama ) t h r o w s IOException Env´ el datagrama UDP. ıa juan.gutierrez@uv.es P´gina: 5 a
  • 6. Programacion en red. LP (Telem´tica) a Curso 04/05 Universitat de Val`ncia e p u b l i c v o i d r e c e i v e ( DatagramPacket datagrama ) t h r o w s IOException Espera a que llegue un paquete UDP y lo almacena en el DatagramPacket pasado como argu- mento. Una vez recibido, los datos sobre la direcci´n y puerto ser´n los correspondientes a la o a m´quina origen. Si no se ha establecido el tiempo de espera, este m´todo bloquea la ejecuci´n a e o del programa hasta que se reciba el paquete UDP. p u b l i c void s e t R e c e i v e B u f f e r S i z e ( i n t long ) throws SocketException Establece el tama˜o del buffer para los paquetes UDP de entrada. Si este valor es peque˜o y n n llegan muchos paquetes UDP en un corto espacio de tiempo es posible que alguno de ellos se pierda. p u b l i c void s e t S e n d B u f f e r S i z e ( i n t long ) throws SocketException Establece el tama˜o del buffer para los datagramas UDP de salida. n p u b l i c v o i d setSoTimeout ( i n t d u r a c i o n ) Establece el tiempo de espera del socket. El valor es el n´mero de milisegundos que el m´todo u e receive() se esperar´ antes de lanzar una excepci´n del tipo SocketTimeoutException. a o public void close () Cierra el socket y libera el puerto. La estructura b´sica que debe tener una aplicaci´n para la creaci´n y el env´ de paquetes UDP a o o ıo se muestra en el siguiente c´digo. o DatagramSocket s o c k e t = new DatagramSocket ( ) ; DatagramPacket p a q u e t e = new DatagramPacket ( new b y t e [ 1 0 2 4 ] , 1 0 2 4 ) ; p a q u e t e . s e t A d d r e s s ( I n e t A d d r e s s . getByName ( maquina ) ) ; paquete . s etPor t (2000) ; boolean f i n a l i z a r = f a l s e ; while ( ! f i n a l i z a r ){ // A s ign ar l o s d a t o s a l b u f f e r d e l p a q u e t e UDP ... s o c k e t . send ( p a q u e t e ) ; juan.gutierrez@uv.es P´gina: 6 a
  • 7. Programacion en red. LP (Telem´tica) a Curso 04/05 Universitat de Val`ncia e ... } socket . close () ; La estructura b´sica que debe tener una aplicaci´n para la recepci´n de paquetes UDP a trav´s a o o e del puerto 2000 se muestra en el siguiente c´digo. o DatagramSocket s o c k e t = new DatagramSocket ( 2 0 0 0 ) ; DatagramPacket p a q u e t e = new DatagramPacket ( new b y t e [ 1 0 2 4 ] , 1 0 2 4 ) ; boolean f i n a l i z a r = f a l s e ; while ( ! f i n a l i z a r ){ s o c k e t . r e c e i v e ( paquete ) ; // E x t r a e r l o s d a t o s d e l p a q u e t e UDP ... } socket . close () ; Al procesar el paquete la aplicaci´n debe trabajar con el array de bytes que contiene los datos. o Sin embargo, a partir de los datos es posible construir un ByteArrayInputStream y utilizar ´ste para e obtener un flujo de entrada filtrado. 2.1. Ejemplo Supongamos que para monitorizar durante 40 segundos la trayectoria seguida por un cohete durante su lanzamiento, se obtienen datos enviados desde el cohete y datos de diversas estaciones de radar. Cada estaci´n de radar proporciona datos cada 100 milisegundos y los datos del cohete est´n disponibles o a cada 20 milisegundos. Todos estos datos deben ser enviados a una m´quina encargada de procesarlos a y almacenarlos. Vamos a suponer que los datos que env´ el cohete son: velocidad horizontal y vertical, altitud y ıa temperatura. Cada estaci´n de radar proporciona a su vez el dato de la distancia a la que se encuentra o el cohete respecto de la estaci´n de radar. o En el directorio Ejemplos/UDP/Cohete hay una serie de clases que permiten realizar una simulaci´n o utilizando 20 estaciones de radar. Los datos que proporciona esta simulaci´n no son realistas ya que la parte relevante es la cons- o trucci´n, env´ y obtenci´n de los paquetes UDP. o ıo o 3. TCP Es un protocolo de la capa de transporte que las aplicaciones pueden utilizar para enviar paquetes de datos y que garantiza la entrega en el mismo orden en el que se han enviado. juan.gutierrez@uv.es P´gina: 7 a
  • 8. Programacion en red. LP (Telem´tica) a Curso 04/05 Universitat de Val`ncia e Desde el punto de vista de la aplicaci´n, TCP transfiere un flujo continuo de bytes (por lo que se o pueden utilizar los flujos de Entrada/Salida) a trav´s de Internet. La aplicaci´n no ha de preocuparse e o de dividir los datos en bloques. El coste de la garant´ de entrega y de la ordenaci´n de los datos es la reducci´n del rendimiento ıa o o en la red. Java proporciona dos clases para el trabajo con el protocolo TCP: java.net.Socket java.net.ServerSocket La clase Socket se utiliza para crear el cliente que se conecta a un determinado servicio. La clase ServerSocket se utiliza para crear el servidor asociado a un puerto. La clase Socket representa un canal de comunicaci´n entre dos puertos de comunicaci´n TCP que o o pertenecen a una o dos m´quinas. Un socket TCP no puede comunicar m´s de dos m´quinas. a a a Si se requiere esta funcionalidad el cliente debe establecer m´ltiples conexiones, una por cada u m´quina. a Esta clase ofrece diversos constructores entre los que cabe destacar: Socket ( InetAddress dir , i n t puerto ) Crea un socket conectado a la IP y puerto especificados. Socket ( InetAddress dir , i n t puerto , InetAddress l o c a l d i r , i n t puertoLocal ) Crea un socket conectado la IP y puerto especificados y es asociado a la IP local y al puerto proporcionados. S o c k e t ( S t r i n g maquina , i n t p u e r t o ) Crea un socket conectado la m´quina y puerto especificados. a S o c k e t ( S t r i n g maquina , i n t p u e r t o , I n e t A d d r e s s l o c a l , i n t p u e r t o L o c a l ) juan.gutierrez@uv.es P´gina: 8 a
  • 9. Programacion en red. LP (Telem´tica) a Curso 04/05 Universitat de Val`ncia e Crea un socket conectado la maquina y puerto especificados y es asociado a la IP local y al puerto proporcionados. Una vez que se ha creado el socket las operaciones habituales que se pueden realizar con el objeto son: leer informaci´n, enviar datos, establecer opciones y cerrar la conexi´n. o o Vamos a ver cuales son algunos de los m´todos que ofrece esta clase. e p u b l i c OutputStream getOutputStream ( ) t h r o w s IOException Devuelve un flujo de salida que se puede utilizar para escribir datos que se env´ a la aplicaci´n ıan o a la que est´ conectado este socket. a p u b l i c InputStream g e t I n p u t S t r e a m ( ) t h r o w s IOException Devuelve un flujo de entrada que se puede utilizar para leer datos de se reciben de la aplicaci´n o a la que est´ conectado este socket. a p u b l i c v o i d s e t R e c e i v e B u f f e r S i z e ( i n t tam ) t h r o w s S o c k e t E x c e p t i o n Asigna a la opci´n SO RCVBUF el valor especificado. Esta opci´n es utilizada para establecer o o el tama˜o del buffer de red para la entrada. n Para conocer el valor por defecto se puede utilizar getReceiveBufferSize(). La llamada a este m´todo se debe realizar realizar antes de conectar el socket. e p u b l i c v o i d s e t S e n d B u f f e r S i z e ( i n t tam ) t h r o w s S o c k e t E x c e p t i o n Asigna a la opci´n SO SNDBUF el valor especificado. Esta opci´n es utilizada para establecer o o el tama˜o del buffer de red para la salida. n Para conocer el valor por defecto se puede utilizar getSendBufferSize(). p u b l i c v o i d setSoTimeout ( i n t d u r a c i o n ) t h r o w s S o c k e t E x c e p t i o n Establece el valor de la opci´n SO TIMEOUT que controla el tiempo en milisegundos que o bloquear´n las operaciones de lectura. Un valor de cero bloquea de forma indefinida, en otro a caso al transcurrir el tiempo especificado y no recibir datos, se lanza una excepci´n del tipo o SocketTimeoutException. juan.gutierrez@uv.es P´gina: 9 a
  • 10. Programacion en red. LP (Telem´tica) a Curso 04/05 Universitat de Val`ncia e p u b l i c v o i d setTcpNoDelay ( b o o l e a n f l a g ) t h r o w s S o c k e t E x c e p t i o n Establece el valor de la opci´n TCP NODELAY que determina si se debe utilizar el algoritmo o de Nagle. 1 p u b l i c v o i d shutdownInput ( ) t h r o w s IOException Cierra el flujo de entrada de el socket, de forma que las operaciones de lectura devolver´n el a marcador de final de fichero. p u b l i c v o i d shutdownOutput ( ) t h r o w s IOException Cierra el flujo de salida de el socket, de forma que las operaciones de escritura lanzar´n una a excepci´n del tipo IOException. o p u b l i c v o i d c l o s e ( ) t h r o w s IOException Cierra el socket. Una vez cerrado, no se puede volver a conectar. Se necesitar´ crear un nuevo ıa socket. Para el resto de m´todos consultad el API. e En cuanto a la clase ServerSocket el constructor m´s sencillo es: a S e r v e r S o c k e t ( i n t p u e r t o ) t h r o w s IOException Crea un socket servidor asociado al puerto que se pasa como argumento de forma que los clientes puedan localizar el servicio TCP que ofrece. Si el puerto ya est´ asociado se lanza una a excepci´n. o Una vez que se tiene un objeto de este tipo, se puede obtener un Socket para modelar la conexi´n o entre el cliente y el servidor mediante el m´todo: e p u b l i c S o c k e t a c c e p t ( ) t h r o w s IOException Espera a que el socket cliente realice una petici´n de conexi´n y devuelve el socket correspon- o o diente. Es una operaci´n que bloquea hasta que no se produzca una conexi´n (a no ser que se o o haya establecido la opci´n SO TIMEOUT o juan.gutierrez@uv.es P´gina: 10 a
  • 11. Programacion en red. LP (Telem´tica) a Curso 04/05 Universitat de Val`ncia e Para el resto de m´todos consultad el API. e En el directorio Ejemplos/TCP hay un ejemplo de uso de estas clases. 4. HTTP 4.1. La clase URL Esta clase sirve para representar uno de los tipos m´s usados de direcci´n en Internet: el Uniform a o Resource Locator. Las direcciones URL pueden referirse a ficheros, sitios Web, sitios FTP, direcciones de correo electr´nico, etc. o La estructura de estas direcciones es: protocolo : // hostname (: puerto) ruta (#ref erencia) La clase URL dispone de varios constructores entre los que cabe destacar: URL( S t r i n g cadena ) t h r o w s MalformedException Crea un objeto URL a partir de la direcci´n pasada en forma de String. o URL( S t r i n g p r o t o c o l o , S t r i n g host , S t r i n g f i l e ) t h r o w s MalformedException Crea un objeto URL a partir del protocolo, la m´quina y el recurso pasados en forma de String. a URL( S t r i n g p r o t o c o l o , S t r i n g host , i n t p u e r t o , S t r i n g f i l e ) t h r o w s MalformedException Crea un objeto URL a partir del protocolo, la m´quina y el recurso pasados en forma de String, a y el puerto pasado como un entero. URL(URL c o n t e x t o , S t r i n g r e l a t i v o ) t h r o w s MalformedException juan.gutierrez@uv.es P´gina: 11 a
  • 12. Programacion en red. LP (Telem´tica) a Curso 04/05 Universitat de Val`ncia e Crea un objeto URL a partir una ruta relativa a la URL pasada como primer argumento. URL( S t r i n g p r o t o c o l , S t r i n g host , i n t po rt , S t r i n g f i l e , URLStreamHandler h a n d l e r ) throws MalformedException Crea un objeto URL donde se especifica un objeto para manejar el protocolo que se utilizar´ du- a rante la conexi´n. Por ejemplo un manejador de protocolo HTTP conoce c´mo comunicarse o o con un servidor HTTP y un manejador de protocolo FTP conoce c´mo comunicarse con un o servidor FTP. Si se va a utilizar un protocolo que no est´ implementado, se debe proporcional a el URLStreamHandler Algunos de los m´todos de los que dispone esta clase son: e String getProtocol () Devuelve el protocolo asociado al URL String getHost ( ) Devuelve la m´quina asociada al URL a i n t getPort () Devuelve el puerto asociado al URL URLConnection openConnection ( ) t h r o w s IOException Devuelve un objet URLConnection que representa una conexi´n con el recurso remoto al que o hace referencia el objeto URL. InputStream openStream ( ) t h r o w s IOException Abre una conexi´n con el URL y devuelve un objeto del tipo InputStream para leer a trav´s o e de esa conexi´n. o Si se necesita controlar la forma en la que realiza la petici´n del recurso se debe utilizar el m´todo o e openConnection(). Si lo unico que se desea hacer es leer el recurso se puede utilizarn openStream(). ´ juan.gutierrez@uv.es P´gina: 12 a
  • 13. Programacion en red. LP (Telem´tica) a Curso 04/05 Universitat de Val`ncia e 4.2. La clase URLConnection La clase URLConnection es la superclase abstracta de todas las clases que representan la comunicaci´n o entre la aplicaci´n y un URL. o Un objeto de este tipo se puede utilizar para leer desde y para escribir hacia el el recurso al que hace referencia el objeto URL. En general la creaci´n de una conexi´n implica los siguientes pasos: o o 1. Se obtiene un objeto URLConnection utilizando el m´todo openConnection() de un objeto URL. e 2. Se establecen los par´metros y las propiedades de la petici´n. a o 3. Se establece la conexi´n utilizando el m´todo connect() o e 4. Se puede obtener informaci´n sobre la cabecera o/y obtener el recurso remoto. o Algunos de los m´todos de esta clase son: e v o i d c o n n e c t ( ) t h r o w s IOException Establece una conexi´n entre la aplicaci´n (el cliente) y el recurso (servidor). Antes de invocar o o a este m´todo la aplicaci´n puede especificar las propiedades de la cabecera de la petici´n. e o o i n t getContentLength ( ) Devuelve el valor del campo de cabecera content-length o -1 si no est´ definido. a S t r i n g getContentType ( ) Devuelve el valor del campo de cabecera content-type o null si no est´ definido. a S t r i n g g e t H e a d e r F i e l d ( S t r i n g campo ) Devuelve el valor del campo de cabecera especificado o null si no est´ definido. a OutputStream getOutputStream ( ) t h r o w s IOException juan.gutierrez@uv.es P´gina: 13 a
  • 14. Programacion en red. LP (Telem´tica) a Curso 04/05 Universitat de Val`ncia e Devuelve un objeto OutputStream para escribir datos en esta conexi´n. o InputStream g e t I n p u t S t r e a m ( ) t h r o w s IOException Devuelve un objeto InputStream para leer datos de esta conexi´n. o v o i d s e t R e q u e s t P r o p e r t y ( S t r i n g key , S t r i n g v a l u e ) Establece una propiedad de la petici´n. Por ejemplo: o ¨ setRequestProperty ( User-agent”, .agente”); 4.3. La clase HttpURLConnection Es una subclase de URLConnection que soporta caracter´ ısticas propias del protocolo HTTP. Esta clase no tiene constructor, la forma de obtener una referencia a un objeto de este tipo es: URL d i r e c c i o n = new URL( d i r ) ; URLConnection c o n e x i o n = u r l . openConnection ( ) ; // Comprobamos su t i p o i f ( c o n e x i o n i n s t a n c e o f HttpURLConnection ) { // Se r e a l i z a un c a s t HttpURLConnection conexionHTTP = ( HttpURLConnection ) c o n e x i o n ; // Resto d e l c o d i g o } Algunos de los m´todos que define esta clase (adem´s de los de URLConnection) son: e a void disconnect () Si la conexi´n con el servidor Web est´ activa se cierra o a v o i d setRequestMethod ( S t r i n g metodo ) t h r o w s P r o t o c o l E x c e p t i o n juan.gutierrez@uv.es P´gina: 14 a
  • 15. Programacion en red. LP (Telem´tica) a Curso 04/05 Universitat de Val`ncia e Establece el m´todo de petici´n que se utilizar´ en esta conexi´n (POST, GET, HEAD,...) e o a o Debe ser utilizado antes de llamar a connect(). boolean usingProxy ( ) Muestra si se est´ utilizando un servidor proxy para la conexi´n. a o i n t getResponseCode ( ) Obtiene el c´digo de estado del mensaje de respuesta HTTP. Por ejemplo para las siguientes o l´ ıneas de estado: HTTP/1.0 200 OK HTTP/1.0 401 Unauthorized Se obtendr´ 200 y 401 respectivamente. ıa Devuelve -1 si no se puede obtener el c´digo a partir de la respuesta. o juan.gutierrez@uv.es P´gina: 15 a