Sockets en JAVA

26
SOCKETS EN JAVA PROTOCOLO UDP 1

Transcript of Sockets en JAVA

Page 1: Sockets en JAVA

SOCKETS EN JAVA

PROTOCOLO UDP

1

DEFINICIOacuteN CONCEPTO Y ESTRUCTURA

bull UN DATAGRAMA ES UN FRAGMENTO DE PAQUETE (ANAacuteLOGO A UN TELEGRAMA) QUE ES ENVIADO CON LA SUFICIENTE INFORMACIOacuteN PARA QUE LA RED PUEDA SIMPLEMENTE ENCAMINAR EL FRAGMENTO HACIA EL EQUIPO TERMINAL DE DATOS RECEPTOR DE MANERA INDEPENDIENTE A LOS FRAGMENTOS RESTANTES

2

3

Estructura de un datagrama es cabecera y datos

4

Te va todoesto

a quieacuten le importa soacutelo enviacutealo lo

maacutes raacutepido

a quieacuten le importa soacutelo enviacutealo lo

maacutes raacutepido

Los datagramas tambieacuten son la agrupacioacuten loacutegica de informacioacuten que se enviacutea como una unidad de capa de red a traveacutes de un medio de transmisioacuten sin establecer con anterioridad un circuito virtual Los datagramas IP son las unidades principales de informacioacuten de Internet

USER DATAGRAM PROTOCOL (UDP)

bull ES UN PROTOCOLO DEL NIVEL DE TRANSPORTE BASADO EN EL INTERCAMBIO DE DATAGRAMAS (PAQUETE DE DATOS)

bull PERMITE EL ENVIacuteO DE DATAGRAMAS A TRAVEacuteS DE LA RED SIN QUE SE HAYA ESTABLECIDO PREVIAMENTE UNA CONEXIOacuteN YA QUE EL PROPIO DATAGRAMA INCORPORA SUFICIENTE INFORMACIOacuteN DE DIRECCIONAMIENTO EN SU CABECERA

bull TAMPOCO TIENE CONFIRMACIOacuteN NI CONTROL DE FLUJO POR LO QUE LOS PAQUETES PUEDEN ADELANTARSE UNOS A OTROS

bull TAMPOCO SE SABE SI HA LLEGADO CORRECTAMENTE YA QUE NO HAY CONFIRMACIOacuteN DE ENTREGA O RECEPCIOacuteN

5

ENRUTAMIENTO

ENRUTAR ES EL PROCESO DE SELECCIOacuteN DE UN CAMINO PARA EL ENVIacuteO DE PAQUETES LA COMPUTADORA QUE HACE ESTO ES LLAMADA ROUTER

6

En general se puede dividir el enrutamiento en Entrega Directa y Entrega Indirecta La Entrega Directa es la transmisioacuten de un Datagrama de una maquina a otra dentro de la misma red fiacutesica La Entrega Indirecta ocurre cuando el destino no estaacute en la red local lo que obliga al Host a enviar el Datagrama a alguacuten Router intermedio

Puertos UDP utiliza puertos para permitir la comunicacioacuten entre aplicaciones El campo de puerto tiene una longitud de 16 bits por lo que el rango de valores vaacutelidos va de 0 a 65535

EL PROTOCOLO UDP (USERDATAGRAM PROTOCOL)

ES UN PROTOCOLO NO ORIENTADO A CONEXIOacuteN DE LA CAPA DE TRANSPORTE DEL MODELO TCPIP LO QUE SIGNIFICA QUE NO GARANTIZA NI LA ENTREGA DE PAQUETES NI QUE LOS PAQUETES LLEGUEN EN ORDEN SECUENCIAL DONDE EL CONTROL SOBRE EL DESTINO FINAL DE UN PAQUETE UDP RECAE EN EL EQUIPO QUE LO ENVIacuteA

7

UN SOCKET

ES UNA REFERENCIA INDIRECTA A UN PUERTO PARTICULAR USADA POR EL PROCESO RECEPTOR EN LA MAacuteQUINA RECEPTORA

LOS SOCKETS UDP PUEDE RECIBIR DATOS DE MAacuteS DE UN HOST SI HAY VARIAS MAacuteQUINAS ordmDEBE HABER COMUNICACIOacuteN ENTONCES UDP PUEDE SER MAacuteS CONVENIENTE QUE OTROS MECANISMOS COMO TCP

ordm

8

COMUNICACIOacuteN BASADA EN DATAGRAMAS

UN DATAGRAMA ES TRANSMITIDO ENTRE PROCESOS CUANDO UN PROCESO LO ENVIacuteA Y OTRO PROCESO LO RECIBE CUALQUIER PROCESO QUE NECESITE ENVIAR O RECIBIR MENSAJES DEBE EN PRIMER LUGAR CREAR UN SOCKET A UNA DIRECCIOacuteN DE HOST Y UN PUERTO LOCAL

UN SERVIDOR ENLAZARAacute ESE SOCKET A UN PUERTO SERVIDOR ndash IDENTIFICANDO AL CLIENTE DE MANERA QUE PUEDAN ENVIAR MENSAJES AL MISMO UN CLIENTE ENLAZA SU SOCKET A CUALQUIER PUERTO LOCAL LIBRE EL MEacuteTODO RECEPTOR DEVUELVE LA HOST Y EL PUERTO DEL EMISOR ADEMAacuteS DEL MENSAJE PERMITIENDO A LOS RECEPTORES ENVIAR UNA RESPUESTA

9

10

Las clases Java para establecer comunicaciones mediante datagramas son1javanetDatagramPacket Permite enviar o recibir paquete 2 javanetDatagramSocket Permite crea un socket de datagrama con destino al puerto x

MEacuteTODOS

bull INETADDRESS GETADDRESS() - DEVUELVE LA DIRECCIOacuteN IP DESDE QUE UNDATAGRAMPACKET FUE ENVIADO O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) LA DIRECCIOacuteN IP DE DESTINO

bull BYTE [] GETDATA () - DEVUELVE EL CONTENIDO DE LA DATAGRAMPACKET REPRESENTADO COMO UNA MATRIZ DE BYTES

bull INT GETLENGTH INT () - DEVUELVE LA LONGITUD DE LOS DATOS ALMACENADOS EN UN DATAGRAMPACKET ESTO PUEDE SER MENOR QUE EL TAMANtildeO REAL DEL BUacuteFER DE DATOS

bull INT GETPORT () - DEVUELVE EL NUacuteMERO DE PUERTO DESDE DONDE SE ENVIOacute UN DATAGRAMPACKET O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) EL NUacuteMERO DE PUERTO DE DESTINO

bull SETADDRESS (INETADDRESS ADDR) - ASIGNA UNA NUEVA DIRECCIOacuteN DE DESTINO A UN DATAGRAMPACKET

bull SETDATA (BYTE [] BUFFER) - ASIGNA UN BUFFER DE DATOS NUEVOS A LA DATAGRAMPACKET

bull SETLENGTH (INT LENGTH) - ASIGNA UNA NUEVA LONGITUD DE LA DATAGRAMPACKET

bull SETPORT (INT PORT) - ASIGNA UN PUERTO DE DESTINO A UN NUEVO DATAGRAMPACKET

11

bull JAVA PROPORCIONA CLASES PARA DAR SOPORTE A LA COMUNICACIOacuteN VIacuteA DATAGRAMAS UDP TODAS ELLAS CONTENIDAS EN EL PAQUETE JAVANET

bull ESTAS CLASES SON

bull DATAGRAMSOCKET

bull DATAGRAMPACKET

12

CLASE DATAGRAMSOCKET

bull LA CLASE DATAGRAMSOCKET PROPORCIONA ACCESO A UN SOCKET UDP LO QUE PERMITE QUE LOS PAQUETES UDP PUEDAN SER ENVIADOS Y RECIBIDOS

bull EL MISMO DATAGRAMSOCKET PUEDE SER USADO PARA RECIBIR LOS PAQUETES TANTO COMO PARA ENVIARLOS

13

14

bull DatagramSocket() constructor sin argumentos que permite que el sistema elija un puerto entre los que esteacuten libres y selecciona una de las direcciones locales

bull DatagramSocket(int port) constructor que toma un nuacutemero de puerto como argumento apropiado para los procesos que necesitan un nuacutemero de puerto (servicios)

bull DatagramSocket(int port InetAddress laddr) constructor que toma como argumentos el nuacutemero de puerto y una determinada direccioacuten local

DatagramSocket maneja sockets para enviar y recibir datagramas UDP Proporciona tres constructores

MEacuteTODOS DE LA CLASE DATAGRAMSOCKET

bull SEND(DATAGRAMPACKET P) Y RECEIVE(DATAGRAMPACKET P) ESTOS MEacuteTODOS SIRVEN PARA TRANSMITIR DATAGRAMAS ENTRE UN PAR DE CONECTORES EL ARGUMENTO DE SEND ES UNA INSTANCIA DE DATAGRAMPACKET CONTENIENDO EL MENSAJE Y EL DESTINO EL ARGUMENTO DE RECEIVE ES UN DATAGRAMPACKET VACIacuteO EN EL QUE COLOCAR EL MENSAJE SU LONGITUD Y SU ORIGEN

bull SETSOTIMEOUT(INT TIMEOUT) ESTE MEacuteTODO PERMITE ESTABLECER UN TIEMPO DE ESPERA LIacuteMITE CUANDO SE FIJA UN LIacuteMITE EL MEacuteTODO RECEIVE SE BLOQUEA DURANTE EL TIEMPO FIJADO Y DESPUEacuteS LANZA UNA EXCEPCIOacuteN INTERRUPTEDIOEXCEPTION

bull CONNECT(INETADDRESS ADDRESS INT PORT) ESTE MEacuteTODO SE UTILIZA PARA CONECTARSE A UN PUERTO REMOTO Y A UNA DIRECCIOacuteN INTERNET CONCRETOS EN CUYO CASO EL CONECTOR SOacuteLO PODRAacute ENVIAR Y RECIBIR MENSAJES DE ESA DIRECCIOacuteN 15

ENVIAR Y RECIBIR LOS DATAGRAMPACKET

PARA ENVIAR EL DATAGRAMPACKET DEBEMOS LLAMAR AL MEacuteTODO SEND() DE DATAGRAMSOCKET PASANDO COMO PARAacuteMETRO EL DATAGRAMPACKET QUE ACABAMOS DE CREAR

ENVIAR DATAGRAMPACKET

SOCKETSEND(DATO)

bullPARA RECIBIR IGUAL PERO CON SOCKETRECEIVE()

RECIBIR DATAGRAMPACKET

SOCKETRECEIVE(DATO)

16

MEacuteTODOSbull CLOSE() - CIERRA UN SOCKET Y SE DESLIGA DEL PUERTO LOCAL

bull CONNECT (INETADDRESS REMOTE_ADDR REMOTE_PORT INT) ndash RESTRINGE EL ACCESO A LA DIRECCIOacuteN ESPECIFICADA A DISTANCIA Y EL PUERTO

bull DISCONNECT() - DESCONECTA EL DATAGRAMSOCKET

bull INETADDRESS GETINETADDRESS () - DEVUELVE LA DIRECCIOacuteN REMOTA A LA QUE EL SOCKET ESTAacute CONECTADO O NULL SI NO EXISTE NINGUNA TAL CONEXIOacuteN

bull INT GETPORT () - DEVUELVE EL PUERTO REMOTO AL QUE ESTAacute CONECTADO EL SOCKET O -1 SI NO EXISTE DICHA CONEXIOacuteN

bull INETADDRESS GETLOCALADDRESS () - DEVUELVE LA DIRECCIOacuteN LOCAL A LA QUE EL SOCKET ESTA ENLAZADO

bull INT GETLOCALPORT () - DEVUELVE EL PUERTO LOCAL AL QUE ESTAacute ENLAZADO EL CONECTOR

bull INT GETRECEIVEBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION ndash DEVUELVE EL TAMANtildeO MAacuteXIMO DEL BUacuteFER UTILIZADO PARA LOS PAQUETES UDP ENTRANTES

bull INT GETSENDBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL TAMANtildeO MAacuteXIMO DE BUacuteFER UTILIZADO PARA PAQUETES UDP SALIENTES

bull GETSOTIMEOUT INT () THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL VALOR DE LA OPCIOacuteN DE CONECTOR DE TIEMPO DE ESPERA ESTE VALOR SE UTILIZA PARA DETERMINAR EL NUacuteMERO DE MILISEGUNDOS QUE UNA OPERACIOacuteN DE LECTURA BLOQUEARA ANTES DE LANZAR UN JAVAIOINTERRUPTEDIOEXCEPTION DE MANERA PREDETERMINADA ESTE VALOR SERAacute IGUAL A CERO LO QUE INDICA QUE EL BLOQUEO DE E S SE UTILIZARAacute

bull RECEIVE (DATAGRAMPACKET PACKET)) THROWS JAVAIOIOEXCEPTION- LEE UN PAQUETE UDP Y ALMACENA EL CONTENIDO EN EL PAQUETE ESPECIFICADO LA DIRECCIOacuteN Y EL PUERTO

17

CLASE DATAGRAMPACKET

bull UN DATAGRAMPACKET SE UTILIZA PARA REPRESENTAR UN PAQUETE UDP Y DEBE SER CREADO ANTES DE RECIBIR LOS PAQUETES

bull PROPORCIONAN CONSTRUCTORES PARA CREAR INSTANCIAS A PARTIR DE LOS DATAGRAMAS RECIBIDOS Y PARA CREAR INSTANCIAS DE DATAGRAMAS QUE VAN A SER ENVIADOS

18

19

Estos constructores crean una instancia de datagrama compuesta por una cadena de bytes que almacena el mensaje la longitud del mensaje y la direccioacuten de Internet y el nuacutemero de puerto local del conector destino tal y como sigue

1Constructores para datagramas que van a ser enviados

DatagramPacket(byte[] buf int length)

DatagramPacket(byte[] buf int length InetAddress address int port)

DatagramPacket

20

2Constructores para datagramas recibido

DatagramPacket(byte[] buf int offset int length)

DatagramPacket(byte[] buf int offset int length InetAddress address int port) Estos constructores nos permiten crear instancias de los datagramas recibidos especificando la cadena de bytes en la que alojar el mensaje la longitud de la misma y el offset dentro de la cadena

Dentro de esta clase hay meacutetodos para obtener los diferentes componentes de un datagrama tanto recibido como enviado

1getData() para obtener el mensaje contenido en el datagrama2getAddress() para obtener la direccioacuten IP3getPort() para obtener el puerto

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 2: Sockets en JAVA

DEFINICIOacuteN CONCEPTO Y ESTRUCTURA

bull UN DATAGRAMA ES UN FRAGMENTO DE PAQUETE (ANAacuteLOGO A UN TELEGRAMA) QUE ES ENVIADO CON LA SUFICIENTE INFORMACIOacuteN PARA QUE LA RED PUEDA SIMPLEMENTE ENCAMINAR EL FRAGMENTO HACIA EL EQUIPO TERMINAL DE DATOS RECEPTOR DE MANERA INDEPENDIENTE A LOS FRAGMENTOS RESTANTES

2

3

Estructura de un datagrama es cabecera y datos

4

Te va todoesto

a quieacuten le importa soacutelo enviacutealo lo

maacutes raacutepido

a quieacuten le importa soacutelo enviacutealo lo

maacutes raacutepido

Los datagramas tambieacuten son la agrupacioacuten loacutegica de informacioacuten que se enviacutea como una unidad de capa de red a traveacutes de un medio de transmisioacuten sin establecer con anterioridad un circuito virtual Los datagramas IP son las unidades principales de informacioacuten de Internet

USER DATAGRAM PROTOCOL (UDP)

bull ES UN PROTOCOLO DEL NIVEL DE TRANSPORTE BASADO EN EL INTERCAMBIO DE DATAGRAMAS (PAQUETE DE DATOS)

bull PERMITE EL ENVIacuteO DE DATAGRAMAS A TRAVEacuteS DE LA RED SIN QUE SE HAYA ESTABLECIDO PREVIAMENTE UNA CONEXIOacuteN YA QUE EL PROPIO DATAGRAMA INCORPORA SUFICIENTE INFORMACIOacuteN DE DIRECCIONAMIENTO EN SU CABECERA

bull TAMPOCO TIENE CONFIRMACIOacuteN NI CONTROL DE FLUJO POR LO QUE LOS PAQUETES PUEDEN ADELANTARSE UNOS A OTROS

bull TAMPOCO SE SABE SI HA LLEGADO CORRECTAMENTE YA QUE NO HAY CONFIRMACIOacuteN DE ENTREGA O RECEPCIOacuteN

5

ENRUTAMIENTO

ENRUTAR ES EL PROCESO DE SELECCIOacuteN DE UN CAMINO PARA EL ENVIacuteO DE PAQUETES LA COMPUTADORA QUE HACE ESTO ES LLAMADA ROUTER

6

En general se puede dividir el enrutamiento en Entrega Directa y Entrega Indirecta La Entrega Directa es la transmisioacuten de un Datagrama de una maquina a otra dentro de la misma red fiacutesica La Entrega Indirecta ocurre cuando el destino no estaacute en la red local lo que obliga al Host a enviar el Datagrama a alguacuten Router intermedio

Puertos UDP utiliza puertos para permitir la comunicacioacuten entre aplicaciones El campo de puerto tiene una longitud de 16 bits por lo que el rango de valores vaacutelidos va de 0 a 65535

EL PROTOCOLO UDP (USERDATAGRAM PROTOCOL)

ES UN PROTOCOLO NO ORIENTADO A CONEXIOacuteN DE LA CAPA DE TRANSPORTE DEL MODELO TCPIP LO QUE SIGNIFICA QUE NO GARANTIZA NI LA ENTREGA DE PAQUETES NI QUE LOS PAQUETES LLEGUEN EN ORDEN SECUENCIAL DONDE EL CONTROL SOBRE EL DESTINO FINAL DE UN PAQUETE UDP RECAE EN EL EQUIPO QUE LO ENVIacuteA

7

UN SOCKET

ES UNA REFERENCIA INDIRECTA A UN PUERTO PARTICULAR USADA POR EL PROCESO RECEPTOR EN LA MAacuteQUINA RECEPTORA

LOS SOCKETS UDP PUEDE RECIBIR DATOS DE MAacuteS DE UN HOST SI HAY VARIAS MAacuteQUINAS ordmDEBE HABER COMUNICACIOacuteN ENTONCES UDP PUEDE SER MAacuteS CONVENIENTE QUE OTROS MECANISMOS COMO TCP

ordm

8

COMUNICACIOacuteN BASADA EN DATAGRAMAS

UN DATAGRAMA ES TRANSMITIDO ENTRE PROCESOS CUANDO UN PROCESO LO ENVIacuteA Y OTRO PROCESO LO RECIBE CUALQUIER PROCESO QUE NECESITE ENVIAR O RECIBIR MENSAJES DEBE EN PRIMER LUGAR CREAR UN SOCKET A UNA DIRECCIOacuteN DE HOST Y UN PUERTO LOCAL

UN SERVIDOR ENLAZARAacute ESE SOCKET A UN PUERTO SERVIDOR ndash IDENTIFICANDO AL CLIENTE DE MANERA QUE PUEDAN ENVIAR MENSAJES AL MISMO UN CLIENTE ENLAZA SU SOCKET A CUALQUIER PUERTO LOCAL LIBRE EL MEacuteTODO RECEPTOR DEVUELVE LA HOST Y EL PUERTO DEL EMISOR ADEMAacuteS DEL MENSAJE PERMITIENDO A LOS RECEPTORES ENVIAR UNA RESPUESTA

9

10

Las clases Java para establecer comunicaciones mediante datagramas son1javanetDatagramPacket Permite enviar o recibir paquete 2 javanetDatagramSocket Permite crea un socket de datagrama con destino al puerto x

MEacuteTODOS

bull INETADDRESS GETADDRESS() - DEVUELVE LA DIRECCIOacuteN IP DESDE QUE UNDATAGRAMPACKET FUE ENVIADO O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) LA DIRECCIOacuteN IP DE DESTINO

bull BYTE [] GETDATA () - DEVUELVE EL CONTENIDO DE LA DATAGRAMPACKET REPRESENTADO COMO UNA MATRIZ DE BYTES

bull INT GETLENGTH INT () - DEVUELVE LA LONGITUD DE LOS DATOS ALMACENADOS EN UN DATAGRAMPACKET ESTO PUEDE SER MENOR QUE EL TAMANtildeO REAL DEL BUacuteFER DE DATOS

bull INT GETPORT () - DEVUELVE EL NUacuteMERO DE PUERTO DESDE DONDE SE ENVIOacute UN DATAGRAMPACKET O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) EL NUacuteMERO DE PUERTO DE DESTINO

bull SETADDRESS (INETADDRESS ADDR) - ASIGNA UNA NUEVA DIRECCIOacuteN DE DESTINO A UN DATAGRAMPACKET

bull SETDATA (BYTE [] BUFFER) - ASIGNA UN BUFFER DE DATOS NUEVOS A LA DATAGRAMPACKET

bull SETLENGTH (INT LENGTH) - ASIGNA UNA NUEVA LONGITUD DE LA DATAGRAMPACKET

bull SETPORT (INT PORT) - ASIGNA UN PUERTO DE DESTINO A UN NUEVO DATAGRAMPACKET

11

bull JAVA PROPORCIONA CLASES PARA DAR SOPORTE A LA COMUNICACIOacuteN VIacuteA DATAGRAMAS UDP TODAS ELLAS CONTENIDAS EN EL PAQUETE JAVANET

bull ESTAS CLASES SON

bull DATAGRAMSOCKET

bull DATAGRAMPACKET

12

CLASE DATAGRAMSOCKET

bull LA CLASE DATAGRAMSOCKET PROPORCIONA ACCESO A UN SOCKET UDP LO QUE PERMITE QUE LOS PAQUETES UDP PUEDAN SER ENVIADOS Y RECIBIDOS

bull EL MISMO DATAGRAMSOCKET PUEDE SER USADO PARA RECIBIR LOS PAQUETES TANTO COMO PARA ENVIARLOS

13

14

bull DatagramSocket() constructor sin argumentos que permite que el sistema elija un puerto entre los que esteacuten libres y selecciona una de las direcciones locales

bull DatagramSocket(int port) constructor que toma un nuacutemero de puerto como argumento apropiado para los procesos que necesitan un nuacutemero de puerto (servicios)

bull DatagramSocket(int port InetAddress laddr) constructor que toma como argumentos el nuacutemero de puerto y una determinada direccioacuten local

DatagramSocket maneja sockets para enviar y recibir datagramas UDP Proporciona tres constructores

MEacuteTODOS DE LA CLASE DATAGRAMSOCKET

bull SEND(DATAGRAMPACKET P) Y RECEIVE(DATAGRAMPACKET P) ESTOS MEacuteTODOS SIRVEN PARA TRANSMITIR DATAGRAMAS ENTRE UN PAR DE CONECTORES EL ARGUMENTO DE SEND ES UNA INSTANCIA DE DATAGRAMPACKET CONTENIENDO EL MENSAJE Y EL DESTINO EL ARGUMENTO DE RECEIVE ES UN DATAGRAMPACKET VACIacuteO EN EL QUE COLOCAR EL MENSAJE SU LONGITUD Y SU ORIGEN

bull SETSOTIMEOUT(INT TIMEOUT) ESTE MEacuteTODO PERMITE ESTABLECER UN TIEMPO DE ESPERA LIacuteMITE CUANDO SE FIJA UN LIacuteMITE EL MEacuteTODO RECEIVE SE BLOQUEA DURANTE EL TIEMPO FIJADO Y DESPUEacuteS LANZA UNA EXCEPCIOacuteN INTERRUPTEDIOEXCEPTION

bull CONNECT(INETADDRESS ADDRESS INT PORT) ESTE MEacuteTODO SE UTILIZA PARA CONECTARSE A UN PUERTO REMOTO Y A UNA DIRECCIOacuteN INTERNET CONCRETOS EN CUYO CASO EL CONECTOR SOacuteLO PODRAacute ENVIAR Y RECIBIR MENSAJES DE ESA DIRECCIOacuteN 15

ENVIAR Y RECIBIR LOS DATAGRAMPACKET

PARA ENVIAR EL DATAGRAMPACKET DEBEMOS LLAMAR AL MEacuteTODO SEND() DE DATAGRAMSOCKET PASANDO COMO PARAacuteMETRO EL DATAGRAMPACKET QUE ACABAMOS DE CREAR

ENVIAR DATAGRAMPACKET

SOCKETSEND(DATO)

bullPARA RECIBIR IGUAL PERO CON SOCKETRECEIVE()

RECIBIR DATAGRAMPACKET

SOCKETRECEIVE(DATO)

16

MEacuteTODOSbull CLOSE() - CIERRA UN SOCKET Y SE DESLIGA DEL PUERTO LOCAL

bull CONNECT (INETADDRESS REMOTE_ADDR REMOTE_PORT INT) ndash RESTRINGE EL ACCESO A LA DIRECCIOacuteN ESPECIFICADA A DISTANCIA Y EL PUERTO

bull DISCONNECT() - DESCONECTA EL DATAGRAMSOCKET

bull INETADDRESS GETINETADDRESS () - DEVUELVE LA DIRECCIOacuteN REMOTA A LA QUE EL SOCKET ESTAacute CONECTADO O NULL SI NO EXISTE NINGUNA TAL CONEXIOacuteN

bull INT GETPORT () - DEVUELVE EL PUERTO REMOTO AL QUE ESTAacute CONECTADO EL SOCKET O -1 SI NO EXISTE DICHA CONEXIOacuteN

bull INETADDRESS GETLOCALADDRESS () - DEVUELVE LA DIRECCIOacuteN LOCAL A LA QUE EL SOCKET ESTA ENLAZADO

bull INT GETLOCALPORT () - DEVUELVE EL PUERTO LOCAL AL QUE ESTAacute ENLAZADO EL CONECTOR

bull INT GETRECEIVEBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION ndash DEVUELVE EL TAMANtildeO MAacuteXIMO DEL BUacuteFER UTILIZADO PARA LOS PAQUETES UDP ENTRANTES

bull INT GETSENDBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL TAMANtildeO MAacuteXIMO DE BUacuteFER UTILIZADO PARA PAQUETES UDP SALIENTES

bull GETSOTIMEOUT INT () THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL VALOR DE LA OPCIOacuteN DE CONECTOR DE TIEMPO DE ESPERA ESTE VALOR SE UTILIZA PARA DETERMINAR EL NUacuteMERO DE MILISEGUNDOS QUE UNA OPERACIOacuteN DE LECTURA BLOQUEARA ANTES DE LANZAR UN JAVAIOINTERRUPTEDIOEXCEPTION DE MANERA PREDETERMINADA ESTE VALOR SERAacute IGUAL A CERO LO QUE INDICA QUE EL BLOQUEO DE E S SE UTILIZARAacute

bull RECEIVE (DATAGRAMPACKET PACKET)) THROWS JAVAIOIOEXCEPTION- LEE UN PAQUETE UDP Y ALMACENA EL CONTENIDO EN EL PAQUETE ESPECIFICADO LA DIRECCIOacuteN Y EL PUERTO

17

CLASE DATAGRAMPACKET

bull UN DATAGRAMPACKET SE UTILIZA PARA REPRESENTAR UN PAQUETE UDP Y DEBE SER CREADO ANTES DE RECIBIR LOS PAQUETES

bull PROPORCIONAN CONSTRUCTORES PARA CREAR INSTANCIAS A PARTIR DE LOS DATAGRAMAS RECIBIDOS Y PARA CREAR INSTANCIAS DE DATAGRAMAS QUE VAN A SER ENVIADOS

18

19

Estos constructores crean una instancia de datagrama compuesta por una cadena de bytes que almacena el mensaje la longitud del mensaje y la direccioacuten de Internet y el nuacutemero de puerto local del conector destino tal y como sigue

1Constructores para datagramas que van a ser enviados

DatagramPacket(byte[] buf int length)

DatagramPacket(byte[] buf int length InetAddress address int port)

DatagramPacket

20

2Constructores para datagramas recibido

DatagramPacket(byte[] buf int offset int length)

DatagramPacket(byte[] buf int offset int length InetAddress address int port) Estos constructores nos permiten crear instancias de los datagramas recibidos especificando la cadena de bytes en la que alojar el mensaje la longitud de la misma y el offset dentro de la cadena

Dentro de esta clase hay meacutetodos para obtener los diferentes componentes de un datagrama tanto recibido como enviado

1getData() para obtener el mensaje contenido en el datagrama2getAddress() para obtener la direccioacuten IP3getPort() para obtener el puerto

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 3: Sockets en JAVA

3

Estructura de un datagrama es cabecera y datos

4

Te va todoesto

a quieacuten le importa soacutelo enviacutealo lo

maacutes raacutepido

a quieacuten le importa soacutelo enviacutealo lo

maacutes raacutepido

Los datagramas tambieacuten son la agrupacioacuten loacutegica de informacioacuten que se enviacutea como una unidad de capa de red a traveacutes de un medio de transmisioacuten sin establecer con anterioridad un circuito virtual Los datagramas IP son las unidades principales de informacioacuten de Internet

USER DATAGRAM PROTOCOL (UDP)

bull ES UN PROTOCOLO DEL NIVEL DE TRANSPORTE BASADO EN EL INTERCAMBIO DE DATAGRAMAS (PAQUETE DE DATOS)

bull PERMITE EL ENVIacuteO DE DATAGRAMAS A TRAVEacuteS DE LA RED SIN QUE SE HAYA ESTABLECIDO PREVIAMENTE UNA CONEXIOacuteN YA QUE EL PROPIO DATAGRAMA INCORPORA SUFICIENTE INFORMACIOacuteN DE DIRECCIONAMIENTO EN SU CABECERA

bull TAMPOCO TIENE CONFIRMACIOacuteN NI CONTROL DE FLUJO POR LO QUE LOS PAQUETES PUEDEN ADELANTARSE UNOS A OTROS

bull TAMPOCO SE SABE SI HA LLEGADO CORRECTAMENTE YA QUE NO HAY CONFIRMACIOacuteN DE ENTREGA O RECEPCIOacuteN

5

ENRUTAMIENTO

ENRUTAR ES EL PROCESO DE SELECCIOacuteN DE UN CAMINO PARA EL ENVIacuteO DE PAQUETES LA COMPUTADORA QUE HACE ESTO ES LLAMADA ROUTER

6

En general se puede dividir el enrutamiento en Entrega Directa y Entrega Indirecta La Entrega Directa es la transmisioacuten de un Datagrama de una maquina a otra dentro de la misma red fiacutesica La Entrega Indirecta ocurre cuando el destino no estaacute en la red local lo que obliga al Host a enviar el Datagrama a alguacuten Router intermedio

Puertos UDP utiliza puertos para permitir la comunicacioacuten entre aplicaciones El campo de puerto tiene una longitud de 16 bits por lo que el rango de valores vaacutelidos va de 0 a 65535

EL PROTOCOLO UDP (USERDATAGRAM PROTOCOL)

ES UN PROTOCOLO NO ORIENTADO A CONEXIOacuteN DE LA CAPA DE TRANSPORTE DEL MODELO TCPIP LO QUE SIGNIFICA QUE NO GARANTIZA NI LA ENTREGA DE PAQUETES NI QUE LOS PAQUETES LLEGUEN EN ORDEN SECUENCIAL DONDE EL CONTROL SOBRE EL DESTINO FINAL DE UN PAQUETE UDP RECAE EN EL EQUIPO QUE LO ENVIacuteA

7

UN SOCKET

ES UNA REFERENCIA INDIRECTA A UN PUERTO PARTICULAR USADA POR EL PROCESO RECEPTOR EN LA MAacuteQUINA RECEPTORA

LOS SOCKETS UDP PUEDE RECIBIR DATOS DE MAacuteS DE UN HOST SI HAY VARIAS MAacuteQUINAS ordmDEBE HABER COMUNICACIOacuteN ENTONCES UDP PUEDE SER MAacuteS CONVENIENTE QUE OTROS MECANISMOS COMO TCP

ordm

8

COMUNICACIOacuteN BASADA EN DATAGRAMAS

UN DATAGRAMA ES TRANSMITIDO ENTRE PROCESOS CUANDO UN PROCESO LO ENVIacuteA Y OTRO PROCESO LO RECIBE CUALQUIER PROCESO QUE NECESITE ENVIAR O RECIBIR MENSAJES DEBE EN PRIMER LUGAR CREAR UN SOCKET A UNA DIRECCIOacuteN DE HOST Y UN PUERTO LOCAL

UN SERVIDOR ENLAZARAacute ESE SOCKET A UN PUERTO SERVIDOR ndash IDENTIFICANDO AL CLIENTE DE MANERA QUE PUEDAN ENVIAR MENSAJES AL MISMO UN CLIENTE ENLAZA SU SOCKET A CUALQUIER PUERTO LOCAL LIBRE EL MEacuteTODO RECEPTOR DEVUELVE LA HOST Y EL PUERTO DEL EMISOR ADEMAacuteS DEL MENSAJE PERMITIENDO A LOS RECEPTORES ENVIAR UNA RESPUESTA

9

10

Las clases Java para establecer comunicaciones mediante datagramas son1javanetDatagramPacket Permite enviar o recibir paquete 2 javanetDatagramSocket Permite crea un socket de datagrama con destino al puerto x

MEacuteTODOS

bull INETADDRESS GETADDRESS() - DEVUELVE LA DIRECCIOacuteN IP DESDE QUE UNDATAGRAMPACKET FUE ENVIADO O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) LA DIRECCIOacuteN IP DE DESTINO

bull BYTE [] GETDATA () - DEVUELVE EL CONTENIDO DE LA DATAGRAMPACKET REPRESENTADO COMO UNA MATRIZ DE BYTES

bull INT GETLENGTH INT () - DEVUELVE LA LONGITUD DE LOS DATOS ALMACENADOS EN UN DATAGRAMPACKET ESTO PUEDE SER MENOR QUE EL TAMANtildeO REAL DEL BUacuteFER DE DATOS

bull INT GETPORT () - DEVUELVE EL NUacuteMERO DE PUERTO DESDE DONDE SE ENVIOacute UN DATAGRAMPACKET O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) EL NUacuteMERO DE PUERTO DE DESTINO

bull SETADDRESS (INETADDRESS ADDR) - ASIGNA UNA NUEVA DIRECCIOacuteN DE DESTINO A UN DATAGRAMPACKET

bull SETDATA (BYTE [] BUFFER) - ASIGNA UN BUFFER DE DATOS NUEVOS A LA DATAGRAMPACKET

bull SETLENGTH (INT LENGTH) - ASIGNA UNA NUEVA LONGITUD DE LA DATAGRAMPACKET

bull SETPORT (INT PORT) - ASIGNA UN PUERTO DE DESTINO A UN NUEVO DATAGRAMPACKET

11

bull JAVA PROPORCIONA CLASES PARA DAR SOPORTE A LA COMUNICACIOacuteN VIacuteA DATAGRAMAS UDP TODAS ELLAS CONTENIDAS EN EL PAQUETE JAVANET

bull ESTAS CLASES SON

bull DATAGRAMSOCKET

bull DATAGRAMPACKET

12

CLASE DATAGRAMSOCKET

bull LA CLASE DATAGRAMSOCKET PROPORCIONA ACCESO A UN SOCKET UDP LO QUE PERMITE QUE LOS PAQUETES UDP PUEDAN SER ENVIADOS Y RECIBIDOS

bull EL MISMO DATAGRAMSOCKET PUEDE SER USADO PARA RECIBIR LOS PAQUETES TANTO COMO PARA ENVIARLOS

13

14

bull DatagramSocket() constructor sin argumentos que permite que el sistema elija un puerto entre los que esteacuten libres y selecciona una de las direcciones locales

bull DatagramSocket(int port) constructor que toma un nuacutemero de puerto como argumento apropiado para los procesos que necesitan un nuacutemero de puerto (servicios)

bull DatagramSocket(int port InetAddress laddr) constructor que toma como argumentos el nuacutemero de puerto y una determinada direccioacuten local

DatagramSocket maneja sockets para enviar y recibir datagramas UDP Proporciona tres constructores

MEacuteTODOS DE LA CLASE DATAGRAMSOCKET

bull SEND(DATAGRAMPACKET P) Y RECEIVE(DATAGRAMPACKET P) ESTOS MEacuteTODOS SIRVEN PARA TRANSMITIR DATAGRAMAS ENTRE UN PAR DE CONECTORES EL ARGUMENTO DE SEND ES UNA INSTANCIA DE DATAGRAMPACKET CONTENIENDO EL MENSAJE Y EL DESTINO EL ARGUMENTO DE RECEIVE ES UN DATAGRAMPACKET VACIacuteO EN EL QUE COLOCAR EL MENSAJE SU LONGITUD Y SU ORIGEN

bull SETSOTIMEOUT(INT TIMEOUT) ESTE MEacuteTODO PERMITE ESTABLECER UN TIEMPO DE ESPERA LIacuteMITE CUANDO SE FIJA UN LIacuteMITE EL MEacuteTODO RECEIVE SE BLOQUEA DURANTE EL TIEMPO FIJADO Y DESPUEacuteS LANZA UNA EXCEPCIOacuteN INTERRUPTEDIOEXCEPTION

bull CONNECT(INETADDRESS ADDRESS INT PORT) ESTE MEacuteTODO SE UTILIZA PARA CONECTARSE A UN PUERTO REMOTO Y A UNA DIRECCIOacuteN INTERNET CONCRETOS EN CUYO CASO EL CONECTOR SOacuteLO PODRAacute ENVIAR Y RECIBIR MENSAJES DE ESA DIRECCIOacuteN 15

ENVIAR Y RECIBIR LOS DATAGRAMPACKET

PARA ENVIAR EL DATAGRAMPACKET DEBEMOS LLAMAR AL MEacuteTODO SEND() DE DATAGRAMSOCKET PASANDO COMO PARAacuteMETRO EL DATAGRAMPACKET QUE ACABAMOS DE CREAR

ENVIAR DATAGRAMPACKET

SOCKETSEND(DATO)

bullPARA RECIBIR IGUAL PERO CON SOCKETRECEIVE()

RECIBIR DATAGRAMPACKET

SOCKETRECEIVE(DATO)

16

MEacuteTODOSbull CLOSE() - CIERRA UN SOCKET Y SE DESLIGA DEL PUERTO LOCAL

bull CONNECT (INETADDRESS REMOTE_ADDR REMOTE_PORT INT) ndash RESTRINGE EL ACCESO A LA DIRECCIOacuteN ESPECIFICADA A DISTANCIA Y EL PUERTO

bull DISCONNECT() - DESCONECTA EL DATAGRAMSOCKET

bull INETADDRESS GETINETADDRESS () - DEVUELVE LA DIRECCIOacuteN REMOTA A LA QUE EL SOCKET ESTAacute CONECTADO O NULL SI NO EXISTE NINGUNA TAL CONEXIOacuteN

bull INT GETPORT () - DEVUELVE EL PUERTO REMOTO AL QUE ESTAacute CONECTADO EL SOCKET O -1 SI NO EXISTE DICHA CONEXIOacuteN

bull INETADDRESS GETLOCALADDRESS () - DEVUELVE LA DIRECCIOacuteN LOCAL A LA QUE EL SOCKET ESTA ENLAZADO

bull INT GETLOCALPORT () - DEVUELVE EL PUERTO LOCAL AL QUE ESTAacute ENLAZADO EL CONECTOR

bull INT GETRECEIVEBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION ndash DEVUELVE EL TAMANtildeO MAacuteXIMO DEL BUacuteFER UTILIZADO PARA LOS PAQUETES UDP ENTRANTES

bull INT GETSENDBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL TAMANtildeO MAacuteXIMO DE BUacuteFER UTILIZADO PARA PAQUETES UDP SALIENTES

bull GETSOTIMEOUT INT () THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL VALOR DE LA OPCIOacuteN DE CONECTOR DE TIEMPO DE ESPERA ESTE VALOR SE UTILIZA PARA DETERMINAR EL NUacuteMERO DE MILISEGUNDOS QUE UNA OPERACIOacuteN DE LECTURA BLOQUEARA ANTES DE LANZAR UN JAVAIOINTERRUPTEDIOEXCEPTION DE MANERA PREDETERMINADA ESTE VALOR SERAacute IGUAL A CERO LO QUE INDICA QUE EL BLOQUEO DE E S SE UTILIZARAacute

bull RECEIVE (DATAGRAMPACKET PACKET)) THROWS JAVAIOIOEXCEPTION- LEE UN PAQUETE UDP Y ALMACENA EL CONTENIDO EN EL PAQUETE ESPECIFICADO LA DIRECCIOacuteN Y EL PUERTO

17

CLASE DATAGRAMPACKET

bull UN DATAGRAMPACKET SE UTILIZA PARA REPRESENTAR UN PAQUETE UDP Y DEBE SER CREADO ANTES DE RECIBIR LOS PAQUETES

bull PROPORCIONAN CONSTRUCTORES PARA CREAR INSTANCIAS A PARTIR DE LOS DATAGRAMAS RECIBIDOS Y PARA CREAR INSTANCIAS DE DATAGRAMAS QUE VAN A SER ENVIADOS

18

19

Estos constructores crean una instancia de datagrama compuesta por una cadena de bytes que almacena el mensaje la longitud del mensaje y la direccioacuten de Internet y el nuacutemero de puerto local del conector destino tal y como sigue

1Constructores para datagramas que van a ser enviados

DatagramPacket(byte[] buf int length)

DatagramPacket(byte[] buf int length InetAddress address int port)

DatagramPacket

20

2Constructores para datagramas recibido

DatagramPacket(byte[] buf int offset int length)

DatagramPacket(byte[] buf int offset int length InetAddress address int port) Estos constructores nos permiten crear instancias de los datagramas recibidos especificando la cadena de bytes en la que alojar el mensaje la longitud de la misma y el offset dentro de la cadena

Dentro de esta clase hay meacutetodos para obtener los diferentes componentes de un datagrama tanto recibido como enviado

1getData() para obtener el mensaje contenido en el datagrama2getAddress() para obtener la direccioacuten IP3getPort() para obtener el puerto

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 4: Sockets en JAVA

4

Te va todoesto

a quieacuten le importa soacutelo enviacutealo lo

maacutes raacutepido

a quieacuten le importa soacutelo enviacutealo lo

maacutes raacutepido

Los datagramas tambieacuten son la agrupacioacuten loacutegica de informacioacuten que se enviacutea como una unidad de capa de red a traveacutes de un medio de transmisioacuten sin establecer con anterioridad un circuito virtual Los datagramas IP son las unidades principales de informacioacuten de Internet

USER DATAGRAM PROTOCOL (UDP)

bull ES UN PROTOCOLO DEL NIVEL DE TRANSPORTE BASADO EN EL INTERCAMBIO DE DATAGRAMAS (PAQUETE DE DATOS)

bull PERMITE EL ENVIacuteO DE DATAGRAMAS A TRAVEacuteS DE LA RED SIN QUE SE HAYA ESTABLECIDO PREVIAMENTE UNA CONEXIOacuteN YA QUE EL PROPIO DATAGRAMA INCORPORA SUFICIENTE INFORMACIOacuteN DE DIRECCIONAMIENTO EN SU CABECERA

bull TAMPOCO TIENE CONFIRMACIOacuteN NI CONTROL DE FLUJO POR LO QUE LOS PAQUETES PUEDEN ADELANTARSE UNOS A OTROS

bull TAMPOCO SE SABE SI HA LLEGADO CORRECTAMENTE YA QUE NO HAY CONFIRMACIOacuteN DE ENTREGA O RECEPCIOacuteN

5

ENRUTAMIENTO

ENRUTAR ES EL PROCESO DE SELECCIOacuteN DE UN CAMINO PARA EL ENVIacuteO DE PAQUETES LA COMPUTADORA QUE HACE ESTO ES LLAMADA ROUTER

6

En general se puede dividir el enrutamiento en Entrega Directa y Entrega Indirecta La Entrega Directa es la transmisioacuten de un Datagrama de una maquina a otra dentro de la misma red fiacutesica La Entrega Indirecta ocurre cuando el destino no estaacute en la red local lo que obliga al Host a enviar el Datagrama a alguacuten Router intermedio

Puertos UDP utiliza puertos para permitir la comunicacioacuten entre aplicaciones El campo de puerto tiene una longitud de 16 bits por lo que el rango de valores vaacutelidos va de 0 a 65535

EL PROTOCOLO UDP (USERDATAGRAM PROTOCOL)

ES UN PROTOCOLO NO ORIENTADO A CONEXIOacuteN DE LA CAPA DE TRANSPORTE DEL MODELO TCPIP LO QUE SIGNIFICA QUE NO GARANTIZA NI LA ENTREGA DE PAQUETES NI QUE LOS PAQUETES LLEGUEN EN ORDEN SECUENCIAL DONDE EL CONTROL SOBRE EL DESTINO FINAL DE UN PAQUETE UDP RECAE EN EL EQUIPO QUE LO ENVIacuteA

7

UN SOCKET

ES UNA REFERENCIA INDIRECTA A UN PUERTO PARTICULAR USADA POR EL PROCESO RECEPTOR EN LA MAacuteQUINA RECEPTORA

LOS SOCKETS UDP PUEDE RECIBIR DATOS DE MAacuteS DE UN HOST SI HAY VARIAS MAacuteQUINAS ordmDEBE HABER COMUNICACIOacuteN ENTONCES UDP PUEDE SER MAacuteS CONVENIENTE QUE OTROS MECANISMOS COMO TCP

ordm

8

COMUNICACIOacuteN BASADA EN DATAGRAMAS

UN DATAGRAMA ES TRANSMITIDO ENTRE PROCESOS CUANDO UN PROCESO LO ENVIacuteA Y OTRO PROCESO LO RECIBE CUALQUIER PROCESO QUE NECESITE ENVIAR O RECIBIR MENSAJES DEBE EN PRIMER LUGAR CREAR UN SOCKET A UNA DIRECCIOacuteN DE HOST Y UN PUERTO LOCAL

UN SERVIDOR ENLAZARAacute ESE SOCKET A UN PUERTO SERVIDOR ndash IDENTIFICANDO AL CLIENTE DE MANERA QUE PUEDAN ENVIAR MENSAJES AL MISMO UN CLIENTE ENLAZA SU SOCKET A CUALQUIER PUERTO LOCAL LIBRE EL MEacuteTODO RECEPTOR DEVUELVE LA HOST Y EL PUERTO DEL EMISOR ADEMAacuteS DEL MENSAJE PERMITIENDO A LOS RECEPTORES ENVIAR UNA RESPUESTA

9

10

Las clases Java para establecer comunicaciones mediante datagramas son1javanetDatagramPacket Permite enviar o recibir paquete 2 javanetDatagramSocket Permite crea un socket de datagrama con destino al puerto x

MEacuteTODOS

bull INETADDRESS GETADDRESS() - DEVUELVE LA DIRECCIOacuteN IP DESDE QUE UNDATAGRAMPACKET FUE ENVIADO O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) LA DIRECCIOacuteN IP DE DESTINO

bull BYTE [] GETDATA () - DEVUELVE EL CONTENIDO DE LA DATAGRAMPACKET REPRESENTADO COMO UNA MATRIZ DE BYTES

bull INT GETLENGTH INT () - DEVUELVE LA LONGITUD DE LOS DATOS ALMACENADOS EN UN DATAGRAMPACKET ESTO PUEDE SER MENOR QUE EL TAMANtildeO REAL DEL BUacuteFER DE DATOS

bull INT GETPORT () - DEVUELVE EL NUacuteMERO DE PUERTO DESDE DONDE SE ENVIOacute UN DATAGRAMPACKET O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) EL NUacuteMERO DE PUERTO DE DESTINO

bull SETADDRESS (INETADDRESS ADDR) - ASIGNA UNA NUEVA DIRECCIOacuteN DE DESTINO A UN DATAGRAMPACKET

bull SETDATA (BYTE [] BUFFER) - ASIGNA UN BUFFER DE DATOS NUEVOS A LA DATAGRAMPACKET

bull SETLENGTH (INT LENGTH) - ASIGNA UNA NUEVA LONGITUD DE LA DATAGRAMPACKET

bull SETPORT (INT PORT) - ASIGNA UN PUERTO DE DESTINO A UN NUEVO DATAGRAMPACKET

11

bull JAVA PROPORCIONA CLASES PARA DAR SOPORTE A LA COMUNICACIOacuteN VIacuteA DATAGRAMAS UDP TODAS ELLAS CONTENIDAS EN EL PAQUETE JAVANET

bull ESTAS CLASES SON

bull DATAGRAMSOCKET

bull DATAGRAMPACKET

12

CLASE DATAGRAMSOCKET

bull LA CLASE DATAGRAMSOCKET PROPORCIONA ACCESO A UN SOCKET UDP LO QUE PERMITE QUE LOS PAQUETES UDP PUEDAN SER ENVIADOS Y RECIBIDOS

bull EL MISMO DATAGRAMSOCKET PUEDE SER USADO PARA RECIBIR LOS PAQUETES TANTO COMO PARA ENVIARLOS

13

14

bull DatagramSocket() constructor sin argumentos que permite que el sistema elija un puerto entre los que esteacuten libres y selecciona una de las direcciones locales

bull DatagramSocket(int port) constructor que toma un nuacutemero de puerto como argumento apropiado para los procesos que necesitan un nuacutemero de puerto (servicios)

bull DatagramSocket(int port InetAddress laddr) constructor que toma como argumentos el nuacutemero de puerto y una determinada direccioacuten local

DatagramSocket maneja sockets para enviar y recibir datagramas UDP Proporciona tres constructores

MEacuteTODOS DE LA CLASE DATAGRAMSOCKET

bull SEND(DATAGRAMPACKET P) Y RECEIVE(DATAGRAMPACKET P) ESTOS MEacuteTODOS SIRVEN PARA TRANSMITIR DATAGRAMAS ENTRE UN PAR DE CONECTORES EL ARGUMENTO DE SEND ES UNA INSTANCIA DE DATAGRAMPACKET CONTENIENDO EL MENSAJE Y EL DESTINO EL ARGUMENTO DE RECEIVE ES UN DATAGRAMPACKET VACIacuteO EN EL QUE COLOCAR EL MENSAJE SU LONGITUD Y SU ORIGEN

bull SETSOTIMEOUT(INT TIMEOUT) ESTE MEacuteTODO PERMITE ESTABLECER UN TIEMPO DE ESPERA LIacuteMITE CUANDO SE FIJA UN LIacuteMITE EL MEacuteTODO RECEIVE SE BLOQUEA DURANTE EL TIEMPO FIJADO Y DESPUEacuteS LANZA UNA EXCEPCIOacuteN INTERRUPTEDIOEXCEPTION

bull CONNECT(INETADDRESS ADDRESS INT PORT) ESTE MEacuteTODO SE UTILIZA PARA CONECTARSE A UN PUERTO REMOTO Y A UNA DIRECCIOacuteN INTERNET CONCRETOS EN CUYO CASO EL CONECTOR SOacuteLO PODRAacute ENVIAR Y RECIBIR MENSAJES DE ESA DIRECCIOacuteN 15

ENVIAR Y RECIBIR LOS DATAGRAMPACKET

PARA ENVIAR EL DATAGRAMPACKET DEBEMOS LLAMAR AL MEacuteTODO SEND() DE DATAGRAMSOCKET PASANDO COMO PARAacuteMETRO EL DATAGRAMPACKET QUE ACABAMOS DE CREAR

ENVIAR DATAGRAMPACKET

SOCKETSEND(DATO)

bullPARA RECIBIR IGUAL PERO CON SOCKETRECEIVE()

RECIBIR DATAGRAMPACKET

SOCKETRECEIVE(DATO)

16

MEacuteTODOSbull CLOSE() - CIERRA UN SOCKET Y SE DESLIGA DEL PUERTO LOCAL

bull CONNECT (INETADDRESS REMOTE_ADDR REMOTE_PORT INT) ndash RESTRINGE EL ACCESO A LA DIRECCIOacuteN ESPECIFICADA A DISTANCIA Y EL PUERTO

bull DISCONNECT() - DESCONECTA EL DATAGRAMSOCKET

bull INETADDRESS GETINETADDRESS () - DEVUELVE LA DIRECCIOacuteN REMOTA A LA QUE EL SOCKET ESTAacute CONECTADO O NULL SI NO EXISTE NINGUNA TAL CONEXIOacuteN

bull INT GETPORT () - DEVUELVE EL PUERTO REMOTO AL QUE ESTAacute CONECTADO EL SOCKET O -1 SI NO EXISTE DICHA CONEXIOacuteN

bull INETADDRESS GETLOCALADDRESS () - DEVUELVE LA DIRECCIOacuteN LOCAL A LA QUE EL SOCKET ESTA ENLAZADO

bull INT GETLOCALPORT () - DEVUELVE EL PUERTO LOCAL AL QUE ESTAacute ENLAZADO EL CONECTOR

bull INT GETRECEIVEBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION ndash DEVUELVE EL TAMANtildeO MAacuteXIMO DEL BUacuteFER UTILIZADO PARA LOS PAQUETES UDP ENTRANTES

bull INT GETSENDBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL TAMANtildeO MAacuteXIMO DE BUacuteFER UTILIZADO PARA PAQUETES UDP SALIENTES

bull GETSOTIMEOUT INT () THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL VALOR DE LA OPCIOacuteN DE CONECTOR DE TIEMPO DE ESPERA ESTE VALOR SE UTILIZA PARA DETERMINAR EL NUacuteMERO DE MILISEGUNDOS QUE UNA OPERACIOacuteN DE LECTURA BLOQUEARA ANTES DE LANZAR UN JAVAIOINTERRUPTEDIOEXCEPTION DE MANERA PREDETERMINADA ESTE VALOR SERAacute IGUAL A CERO LO QUE INDICA QUE EL BLOQUEO DE E S SE UTILIZARAacute

bull RECEIVE (DATAGRAMPACKET PACKET)) THROWS JAVAIOIOEXCEPTION- LEE UN PAQUETE UDP Y ALMACENA EL CONTENIDO EN EL PAQUETE ESPECIFICADO LA DIRECCIOacuteN Y EL PUERTO

17

CLASE DATAGRAMPACKET

bull UN DATAGRAMPACKET SE UTILIZA PARA REPRESENTAR UN PAQUETE UDP Y DEBE SER CREADO ANTES DE RECIBIR LOS PAQUETES

bull PROPORCIONAN CONSTRUCTORES PARA CREAR INSTANCIAS A PARTIR DE LOS DATAGRAMAS RECIBIDOS Y PARA CREAR INSTANCIAS DE DATAGRAMAS QUE VAN A SER ENVIADOS

18

19

Estos constructores crean una instancia de datagrama compuesta por una cadena de bytes que almacena el mensaje la longitud del mensaje y la direccioacuten de Internet y el nuacutemero de puerto local del conector destino tal y como sigue

1Constructores para datagramas que van a ser enviados

DatagramPacket(byte[] buf int length)

DatagramPacket(byte[] buf int length InetAddress address int port)

DatagramPacket

20

2Constructores para datagramas recibido

DatagramPacket(byte[] buf int offset int length)

DatagramPacket(byte[] buf int offset int length InetAddress address int port) Estos constructores nos permiten crear instancias de los datagramas recibidos especificando la cadena de bytes en la que alojar el mensaje la longitud de la misma y el offset dentro de la cadena

Dentro de esta clase hay meacutetodos para obtener los diferentes componentes de un datagrama tanto recibido como enviado

1getData() para obtener el mensaje contenido en el datagrama2getAddress() para obtener la direccioacuten IP3getPort() para obtener el puerto

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 5: Sockets en JAVA

USER DATAGRAM PROTOCOL (UDP)

bull ES UN PROTOCOLO DEL NIVEL DE TRANSPORTE BASADO EN EL INTERCAMBIO DE DATAGRAMAS (PAQUETE DE DATOS)

bull PERMITE EL ENVIacuteO DE DATAGRAMAS A TRAVEacuteS DE LA RED SIN QUE SE HAYA ESTABLECIDO PREVIAMENTE UNA CONEXIOacuteN YA QUE EL PROPIO DATAGRAMA INCORPORA SUFICIENTE INFORMACIOacuteN DE DIRECCIONAMIENTO EN SU CABECERA

bull TAMPOCO TIENE CONFIRMACIOacuteN NI CONTROL DE FLUJO POR LO QUE LOS PAQUETES PUEDEN ADELANTARSE UNOS A OTROS

bull TAMPOCO SE SABE SI HA LLEGADO CORRECTAMENTE YA QUE NO HAY CONFIRMACIOacuteN DE ENTREGA O RECEPCIOacuteN

5

ENRUTAMIENTO

ENRUTAR ES EL PROCESO DE SELECCIOacuteN DE UN CAMINO PARA EL ENVIacuteO DE PAQUETES LA COMPUTADORA QUE HACE ESTO ES LLAMADA ROUTER

6

En general se puede dividir el enrutamiento en Entrega Directa y Entrega Indirecta La Entrega Directa es la transmisioacuten de un Datagrama de una maquina a otra dentro de la misma red fiacutesica La Entrega Indirecta ocurre cuando el destino no estaacute en la red local lo que obliga al Host a enviar el Datagrama a alguacuten Router intermedio

Puertos UDP utiliza puertos para permitir la comunicacioacuten entre aplicaciones El campo de puerto tiene una longitud de 16 bits por lo que el rango de valores vaacutelidos va de 0 a 65535

EL PROTOCOLO UDP (USERDATAGRAM PROTOCOL)

ES UN PROTOCOLO NO ORIENTADO A CONEXIOacuteN DE LA CAPA DE TRANSPORTE DEL MODELO TCPIP LO QUE SIGNIFICA QUE NO GARANTIZA NI LA ENTREGA DE PAQUETES NI QUE LOS PAQUETES LLEGUEN EN ORDEN SECUENCIAL DONDE EL CONTROL SOBRE EL DESTINO FINAL DE UN PAQUETE UDP RECAE EN EL EQUIPO QUE LO ENVIacuteA

7

UN SOCKET

ES UNA REFERENCIA INDIRECTA A UN PUERTO PARTICULAR USADA POR EL PROCESO RECEPTOR EN LA MAacuteQUINA RECEPTORA

LOS SOCKETS UDP PUEDE RECIBIR DATOS DE MAacuteS DE UN HOST SI HAY VARIAS MAacuteQUINAS ordmDEBE HABER COMUNICACIOacuteN ENTONCES UDP PUEDE SER MAacuteS CONVENIENTE QUE OTROS MECANISMOS COMO TCP

ordm

8

COMUNICACIOacuteN BASADA EN DATAGRAMAS

UN DATAGRAMA ES TRANSMITIDO ENTRE PROCESOS CUANDO UN PROCESO LO ENVIacuteA Y OTRO PROCESO LO RECIBE CUALQUIER PROCESO QUE NECESITE ENVIAR O RECIBIR MENSAJES DEBE EN PRIMER LUGAR CREAR UN SOCKET A UNA DIRECCIOacuteN DE HOST Y UN PUERTO LOCAL

UN SERVIDOR ENLAZARAacute ESE SOCKET A UN PUERTO SERVIDOR ndash IDENTIFICANDO AL CLIENTE DE MANERA QUE PUEDAN ENVIAR MENSAJES AL MISMO UN CLIENTE ENLAZA SU SOCKET A CUALQUIER PUERTO LOCAL LIBRE EL MEacuteTODO RECEPTOR DEVUELVE LA HOST Y EL PUERTO DEL EMISOR ADEMAacuteS DEL MENSAJE PERMITIENDO A LOS RECEPTORES ENVIAR UNA RESPUESTA

9

10

Las clases Java para establecer comunicaciones mediante datagramas son1javanetDatagramPacket Permite enviar o recibir paquete 2 javanetDatagramSocket Permite crea un socket de datagrama con destino al puerto x

MEacuteTODOS

bull INETADDRESS GETADDRESS() - DEVUELVE LA DIRECCIOacuteN IP DESDE QUE UNDATAGRAMPACKET FUE ENVIADO O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) LA DIRECCIOacuteN IP DE DESTINO

bull BYTE [] GETDATA () - DEVUELVE EL CONTENIDO DE LA DATAGRAMPACKET REPRESENTADO COMO UNA MATRIZ DE BYTES

bull INT GETLENGTH INT () - DEVUELVE LA LONGITUD DE LOS DATOS ALMACENADOS EN UN DATAGRAMPACKET ESTO PUEDE SER MENOR QUE EL TAMANtildeO REAL DEL BUacuteFER DE DATOS

bull INT GETPORT () - DEVUELVE EL NUacuteMERO DE PUERTO DESDE DONDE SE ENVIOacute UN DATAGRAMPACKET O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) EL NUacuteMERO DE PUERTO DE DESTINO

bull SETADDRESS (INETADDRESS ADDR) - ASIGNA UNA NUEVA DIRECCIOacuteN DE DESTINO A UN DATAGRAMPACKET

bull SETDATA (BYTE [] BUFFER) - ASIGNA UN BUFFER DE DATOS NUEVOS A LA DATAGRAMPACKET

bull SETLENGTH (INT LENGTH) - ASIGNA UNA NUEVA LONGITUD DE LA DATAGRAMPACKET

bull SETPORT (INT PORT) - ASIGNA UN PUERTO DE DESTINO A UN NUEVO DATAGRAMPACKET

11

bull JAVA PROPORCIONA CLASES PARA DAR SOPORTE A LA COMUNICACIOacuteN VIacuteA DATAGRAMAS UDP TODAS ELLAS CONTENIDAS EN EL PAQUETE JAVANET

bull ESTAS CLASES SON

bull DATAGRAMSOCKET

bull DATAGRAMPACKET

12

CLASE DATAGRAMSOCKET

bull LA CLASE DATAGRAMSOCKET PROPORCIONA ACCESO A UN SOCKET UDP LO QUE PERMITE QUE LOS PAQUETES UDP PUEDAN SER ENVIADOS Y RECIBIDOS

bull EL MISMO DATAGRAMSOCKET PUEDE SER USADO PARA RECIBIR LOS PAQUETES TANTO COMO PARA ENVIARLOS

13

14

bull DatagramSocket() constructor sin argumentos que permite que el sistema elija un puerto entre los que esteacuten libres y selecciona una de las direcciones locales

bull DatagramSocket(int port) constructor que toma un nuacutemero de puerto como argumento apropiado para los procesos que necesitan un nuacutemero de puerto (servicios)

bull DatagramSocket(int port InetAddress laddr) constructor que toma como argumentos el nuacutemero de puerto y una determinada direccioacuten local

DatagramSocket maneja sockets para enviar y recibir datagramas UDP Proporciona tres constructores

MEacuteTODOS DE LA CLASE DATAGRAMSOCKET

bull SEND(DATAGRAMPACKET P) Y RECEIVE(DATAGRAMPACKET P) ESTOS MEacuteTODOS SIRVEN PARA TRANSMITIR DATAGRAMAS ENTRE UN PAR DE CONECTORES EL ARGUMENTO DE SEND ES UNA INSTANCIA DE DATAGRAMPACKET CONTENIENDO EL MENSAJE Y EL DESTINO EL ARGUMENTO DE RECEIVE ES UN DATAGRAMPACKET VACIacuteO EN EL QUE COLOCAR EL MENSAJE SU LONGITUD Y SU ORIGEN

bull SETSOTIMEOUT(INT TIMEOUT) ESTE MEacuteTODO PERMITE ESTABLECER UN TIEMPO DE ESPERA LIacuteMITE CUANDO SE FIJA UN LIacuteMITE EL MEacuteTODO RECEIVE SE BLOQUEA DURANTE EL TIEMPO FIJADO Y DESPUEacuteS LANZA UNA EXCEPCIOacuteN INTERRUPTEDIOEXCEPTION

bull CONNECT(INETADDRESS ADDRESS INT PORT) ESTE MEacuteTODO SE UTILIZA PARA CONECTARSE A UN PUERTO REMOTO Y A UNA DIRECCIOacuteN INTERNET CONCRETOS EN CUYO CASO EL CONECTOR SOacuteLO PODRAacute ENVIAR Y RECIBIR MENSAJES DE ESA DIRECCIOacuteN 15

ENVIAR Y RECIBIR LOS DATAGRAMPACKET

PARA ENVIAR EL DATAGRAMPACKET DEBEMOS LLAMAR AL MEacuteTODO SEND() DE DATAGRAMSOCKET PASANDO COMO PARAacuteMETRO EL DATAGRAMPACKET QUE ACABAMOS DE CREAR

ENVIAR DATAGRAMPACKET

SOCKETSEND(DATO)

bullPARA RECIBIR IGUAL PERO CON SOCKETRECEIVE()

RECIBIR DATAGRAMPACKET

SOCKETRECEIVE(DATO)

16

MEacuteTODOSbull CLOSE() - CIERRA UN SOCKET Y SE DESLIGA DEL PUERTO LOCAL

bull CONNECT (INETADDRESS REMOTE_ADDR REMOTE_PORT INT) ndash RESTRINGE EL ACCESO A LA DIRECCIOacuteN ESPECIFICADA A DISTANCIA Y EL PUERTO

bull DISCONNECT() - DESCONECTA EL DATAGRAMSOCKET

bull INETADDRESS GETINETADDRESS () - DEVUELVE LA DIRECCIOacuteN REMOTA A LA QUE EL SOCKET ESTAacute CONECTADO O NULL SI NO EXISTE NINGUNA TAL CONEXIOacuteN

bull INT GETPORT () - DEVUELVE EL PUERTO REMOTO AL QUE ESTAacute CONECTADO EL SOCKET O -1 SI NO EXISTE DICHA CONEXIOacuteN

bull INETADDRESS GETLOCALADDRESS () - DEVUELVE LA DIRECCIOacuteN LOCAL A LA QUE EL SOCKET ESTA ENLAZADO

bull INT GETLOCALPORT () - DEVUELVE EL PUERTO LOCAL AL QUE ESTAacute ENLAZADO EL CONECTOR

bull INT GETRECEIVEBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION ndash DEVUELVE EL TAMANtildeO MAacuteXIMO DEL BUacuteFER UTILIZADO PARA LOS PAQUETES UDP ENTRANTES

bull INT GETSENDBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL TAMANtildeO MAacuteXIMO DE BUacuteFER UTILIZADO PARA PAQUETES UDP SALIENTES

bull GETSOTIMEOUT INT () THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL VALOR DE LA OPCIOacuteN DE CONECTOR DE TIEMPO DE ESPERA ESTE VALOR SE UTILIZA PARA DETERMINAR EL NUacuteMERO DE MILISEGUNDOS QUE UNA OPERACIOacuteN DE LECTURA BLOQUEARA ANTES DE LANZAR UN JAVAIOINTERRUPTEDIOEXCEPTION DE MANERA PREDETERMINADA ESTE VALOR SERAacute IGUAL A CERO LO QUE INDICA QUE EL BLOQUEO DE E S SE UTILIZARAacute

bull RECEIVE (DATAGRAMPACKET PACKET)) THROWS JAVAIOIOEXCEPTION- LEE UN PAQUETE UDP Y ALMACENA EL CONTENIDO EN EL PAQUETE ESPECIFICADO LA DIRECCIOacuteN Y EL PUERTO

17

CLASE DATAGRAMPACKET

bull UN DATAGRAMPACKET SE UTILIZA PARA REPRESENTAR UN PAQUETE UDP Y DEBE SER CREADO ANTES DE RECIBIR LOS PAQUETES

bull PROPORCIONAN CONSTRUCTORES PARA CREAR INSTANCIAS A PARTIR DE LOS DATAGRAMAS RECIBIDOS Y PARA CREAR INSTANCIAS DE DATAGRAMAS QUE VAN A SER ENVIADOS

18

19

Estos constructores crean una instancia de datagrama compuesta por una cadena de bytes que almacena el mensaje la longitud del mensaje y la direccioacuten de Internet y el nuacutemero de puerto local del conector destino tal y como sigue

1Constructores para datagramas que van a ser enviados

DatagramPacket(byte[] buf int length)

DatagramPacket(byte[] buf int length InetAddress address int port)

DatagramPacket

20

2Constructores para datagramas recibido

DatagramPacket(byte[] buf int offset int length)

DatagramPacket(byte[] buf int offset int length InetAddress address int port) Estos constructores nos permiten crear instancias de los datagramas recibidos especificando la cadena de bytes en la que alojar el mensaje la longitud de la misma y el offset dentro de la cadena

Dentro de esta clase hay meacutetodos para obtener los diferentes componentes de un datagrama tanto recibido como enviado

1getData() para obtener el mensaje contenido en el datagrama2getAddress() para obtener la direccioacuten IP3getPort() para obtener el puerto

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 6: Sockets en JAVA

ENRUTAMIENTO

ENRUTAR ES EL PROCESO DE SELECCIOacuteN DE UN CAMINO PARA EL ENVIacuteO DE PAQUETES LA COMPUTADORA QUE HACE ESTO ES LLAMADA ROUTER

6

En general se puede dividir el enrutamiento en Entrega Directa y Entrega Indirecta La Entrega Directa es la transmisioacuten de un Datagrama de una maquina a otra dentro de la misma red fiacutesica La Entrega Indirecta ocurre cuando el destino no estaacute en la red local lo que obliga al Host a enviar el Datagrama a alguacuten Router intermedio

Puertos UDP utiliza puertos para permitir la comunicacioacuten entre aplicaciones El campo de puerto tiene una longitud de 16 bits por lo que el rango de valores vaacutelidos va de 0 a 65535

EL PROTOCOLO UDP (USERDATAGRAM PROTOCOL)

ES UN PROTOCOLO NO ORIENTADO A CONEXIOacuteN DE LA CAPA DE TRANSPORTE DEL MODELO TCPIP LO QUE SIGNIFICA QUE NO GARANTIZA NI LA ENTREGA DE PAQUETES NI QUE LOS PAQUETES LLEGUEN EN ORDEN SECUENCIAL DONDE EL CONTROL SOBRE EL DESTINO FINAL DE UN PAQUETE UDP RECAE EN EL EQUIPO QUE LO ENVIacuteA

7

UN SOCKET

ES UNA REFERENCIA INDIRECTA A UN PUERTO PARTICULAR USADA POR EL PROCESO RECEPTOR EN LA MAacuteQUINA RECEPTORA

LOS SOCKETS UDP PUEDE RECIBIR DATOS DE MAacuteS DE UN HOST SI HAY VARIAS MAacuteQUINAS ordmDEBE HABER COMUNICACIOacuteN ENTONCES UDP PUEDE SER MAacuteS CONVENIENTE QUE OTROS MECANISMOS COMO TCP

ordm

8

COMUNICACIOacuteN BASADA EN DATAGRAMAS

UN DATAGRAMA ES TRANSMITIDO ENTRE PROCESOS CUANDO UN PROCESO LO ENVIacuteA Y OTRO PROCESO LO RECIBE CUALQUIER PROCESO QUE NECESITE ENVIAR O RECIBIR MENSAJES DEBE EN PRIMER LUGAR CREAR UN SOCKET A UNA DIRECCIOacuteN DE HOST Y UN PUERTO LOCAL

UN SERVIDOR ENLAZARAacute ESE SOCKET A UN PUERTO SERVIDOR ndash IDENTIFICANDO AL CLIENTE DE MANERA QUE PUEDAN ENVIAR MENSAJES AL MISMO UN CLIENTE ENLAZA SU SOCKET A CUALQUIER PUERTO LOCAL LIBRE EL MEacuteTODO RECEPTOR DEVUELVE LA HOST Y EL PUERTO DEL EMISOR ADEMAacuteS DEL MENSAJE PERMITIENDO A LOS RECEPTORES ENVIAR UNA RESPUESTA

9

10

Las clases Java para establecer comunicaciones mediante datagramas son1javanetDatagramPacket Permite enviar o recibir paquete 2 javanetDatagramSocket Permite crea un socket de datagrama con destino al puerto x

MEacuteTODOS

bull INETADDRESS GETADDRESS() - DEVUELVE LA DIRECCIOacuteN IP DESDE QUE UNDATAGRAMPACKET FUE ENVIADO O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) LA DIRECCIOacuteN IP DE DESTINO

bull BYTE [] GETDATA () - DEVUELVE EL CONTENIDO DE LA DATAGRAMPACKET REPRESENTADO COMO UNA MATRIZ DE BYTES

bull INT GETLENGTH INT () - DEVUELVE LA LONGITUD DE LOS DATOS ALMACENADOS EN UN DATAGRAMPACKET ESTO PUEDE SER MENOR QUE EL TAMANtildeO REAL DEL BUacuteFER DE DATOS

bull INT GETPORT () - DEVUELVE EL NUacuteMERO DE PUERTO DESDE DONDE SE ENVIOacute UN DATAGRAMPACKET O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) EL NUacuteMERO DE PUERTO DE DESTINO

bull SETADDRESS (INETADDRESS ADDR) - ASIGNA UNA NUEVA DIRECCIOacuteN DE DESTINO A UN DATAGRAMPACKET

bull SETDATA (BYTE [] BUFFER) - ASIGNA UN BUFFER DE DATOS NUEVOS A LA DATAGRAMPACKET

bull SETLENGTH (INT LENGTH) - ASIGNA UNA NUEVA LONGITUD DE LA DATAGRAMPACKET

bull SETPORT (INT PORT) - ASIGNA UN PUERTO DE DESTINO A UN NUEVO DATAGRAMPACKET

11

bull JAVA PROPORCIONA CLASES PARA DAR SOPORTE A LA COMUNICACIOacuteN VIacuteA DATAGRAMAS UDP TODAS ELLAS CONTENIDAS EN EL PAQUETE JAVANET

bull ESTAS CLASES SON

bull DATAGRAMSOCKET

bull DATAGRAMPACKET

12

CLASE DATAGRAMSOCKET

bull LA CLASE DATAGRAMSOCKET PROPORCIONA ACCESO A UN SOCKET UDP LO QUE PERMITE QUE LOS PAQUETES UDP PUEDAN SER ENVIADOS Y RECIBIDOS

bull EL MISMO DATAGRAMSOCKET PUEDE SER USADO PARA RECIBIR LOS PAQUETES TANTO COMO PARA ENVIARLOS

13

14

bull DatagramSocket() constructor sin argumentos que permite que el sistema elija un puerto entre los que esteacuten libres y selecciona una de las direcciones locales

bull DatagramSocket(int port) constructor que toma un nuacutemero de puerto como argumento apropiado para los procesos que necesitan un nuacutemero de puerto (servicios)

bull DatagramSocket(int port InetAddress laddr) constructor que toma como argumentos el nuacutemero de puerto y una determinada direccioacuten local

DatagramSocket maneja sockets para enviar y recibir datagramas UDP Proporciona tres constructores

MEacuteTODOS DE LA CLASE DATAGRAMSOCKET

bull SEND(DATAGRAMPACKET P) Y RECEIVE(DATAGRAMPACKET P) ESTOS MEacuteTODOS SIRVEN PARA TRANSMITIR DATAGRAMAS ENTRE UN PAR DE CONECTORES EL ARGUMENTO DE SEND ES UNA INSTANCIA DE DATAGRAMPACKET CONTENIENDO EL MENSAJE Y EL DESTINO EL ARGUMENTO DE RECEIVE ES UN DATAGRAMPACKET VACIacuteO EN EL QUE COLOCAR EL MENSAJE SU LONGITUD Y SU ORIGEN

bull SETSOTIMEOUT(INT TIMEOUT) ESTE MEacuteTODO PERMITE ESTABLECER UN TIEMPO DE ESPERA LIacuteMITE CUANDO SE FIJA UN LIacuteMITE EL MEacuteTODO RECEIVE SE BLOQUEA DURANTE EL TIEMPO FIJADO Y DESPUEacuteS LANZA UNA EXCEPCIOacuteN INTERRUPTEDIOEXCEPTION

bull CONNECT(INETADDRESS ADDRESS INT PORT) ESTE MEacuteTODO SE UTILIZA PARA CONECTARSE A UN PUERTO REMOTO Y A UNA DIRECCIOacuteN INTERNET CONCRETOS EN CUYO CASO EL CONECTOR SOacuteLO PODRAacute ENVIAR Y RECIBIR MENSAJES DE ESA DIRECCIOacuteN 15

ENVIAR Y RECIBIR LOS DATAGRAMPACKET

PARA ENVIAR EL DATAGRAMPACKET DEBEMOS LLAMAR AL MEacuteTODO SEND() DE DATAGRAMSOCKET PASANDO COMO PARAacuteMETRO EL DATAGRAMPACKET QUE ACABAMOS DE CREAR

ENVIAR DATAGRAMPACKET

SOCKETSEND(DATO)

bullPARA RECIBIR IGUAL PERO CON SOCKETRECEIVE()

RECIBIR DATAGRAMPACKET

SOCKETRECEIVE(DATO)

16

MEacuteTODOSbull CLOSE() - CIERRA UN SOCKET Y SE DESLIGA DEL PUERTO LOCAL

bull CONNECT (INETADDRESS REMOTE_ADDR REMOTE_PORT INT) ndash RESTRINGE EL ACCESO A LA DIRECCIOacuteN ESPECIFICADA A DISTANCIA Y EL PUERTO

bull DISCONNECT() - DESCONECTA EL DATAGRAMSOCKET

bull INETADDRESS GETINETADDRESS () - DEVUELVE LA DIRECCIOacuteN REMOTA A LA QUE EL SOCKET ESTAacute CONECTADO O NULL SI NO EXISTE NINGUNA TAL CONEXIOacuteN

bull INT GETPORT () - DEVUELVE EL PUERTO REMOTO AL QUE ESTAacute CONECTADO EL SOCKET O -1 SI NO EXISTE DICHA CONEXIOacuteN

bull INETADDRESS GETLOCALADDRESS () - DEVUELVE LA DIRECCIOacuteN LOCAL A LA QUE EL SOCKET ESTA ENLAZADO

bull INT GETLOCALPORT () - DEVUELVE EL PUERTO LOCAL AL QUE ESTAacute ENLAZADO EL CONECTOR

bull INT GETRECEIVEBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION ndash DEVUELVE EL TAMANtildeO MAacuteXIMO DEL BUacuteFER UTILIZADO PARA LOS PAQUETES UDP ENTRANTES

bull INT GETSENDBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL TAMANtildeO MAacuteXIMO DE BUacuteFER UTILIZADO PARA PAQUETES UDP SALIENTES

bull GETSOTIMEOUT INT () THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL VALOR DE LA OPCIOacuteN DE CONECTOR DE TIEMPO DE ESPERA ESTE VALOR SE UTILIZA PARA DETERMINAR EL NUacuteMERO DE MILISEGUNDOS QUE UNA OPERACIOacuteN DE LECTURA BLOQUEARA ANTES DE LANZAR UN JAVAIOINTERRUPTEDIOEXCEPTION DE MANERA PREDETERMINADA ESTE VALOR SERAacute IGUAL A CERO LO QUE INDICA QUE EL BLOQUEO DE E S SE UTILIZARAacute

bull RECEIVE (DATAGRAMPACKET PACKET)) THROWS JAVAIOIOEXCEPTION- LEE UN PAQUETE UDP Y ALMACENA EL CONTENIDO EN EL PAQUETE ESPECIFICADO LA DIRECCIOacuteN Y EL PUERTO

17

CLASE DATAGRAMPACKET

bull UN DATAGRAMPACKET SE UTILIZA PARA REPRESENTAR UN PAQUETE UDP Y DEBE SER CREADO ANTES DE RECIBIR LOS PAQUETES

bull PROPORCIONAN CONSTRUCTORES PARA CREAR INSTANCIAS A PARTIR DE LOS DATAGRAMAS RECIBIDOS Y PARA CREAR INSTANCIAS DE DATAGRAMAS QUE VAN A SER ENVIADOS

18

19

Estos constructores crean una instancia de datagrama compuesta por una cadena de bytes que almacena el mensaje la longitud del mensaje y la direccioacuten de Internet y el nuacutemero de puerto local del conector destino tal y como sigue

1Constructores para datagramas que van a ser enviados

DatagramPacket(byte[] buf int length)

DatagramPacket(byte[] buf int length InetAddress address int port)

DatagramPacket

20

2Constructores para datagramas recibido

DatagramPacket(byte[] buf int offset int length)

DatagramPacket(byte[] buf int offset int length InetAddress address int port) Estos constructores nos permiten crear instancias de los datagramas recibidos especificando la cadena de bytes en la que alojar el mensaje la longitud de la misma y el offset dentro de la cadena

Dentro de esta clase hay meacutetodos para obtener los diferentes componentes de un datagrama tanto recibido como enviado

1getData() para obtener el mensaje contenido en el datagrama2getAddress() para obtener la direccioacuten IP3getPort() para obtener el puerto

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 7: Sockets en JAVA

EL PROTOCOLO UDP (USERDATAGRAM PROTOCOL)

ES UN PROTOCOLO NO ORIENTADO A CONEXIOacuteN DE LA CAPA DE TRANSPORTE DEL MODELO TCPIP LO QUE SIGNIFICA QUE NO GARANTIZA NI LA ENTREGA DE PAQUETES NI QUE LOS PAQUETES LLEGUEN EN ORDEN SECUENCIAL DONDE EL CONTROL SOBRE EL DESTINO FINAL DE UN PAQUETE UDP RECAE EN EL EQUIPO QUE LO ENVIacuteA

7

UN SOCKET

ES UNA REFERENCIA INDIRECTA A UN PUERTO PARTICULAR USADA POR EL PROCESO RECEPTOR EN LA MAacuteQUINA RECEPTORA

LOS SOCKETS UDP PUEDE RECIBIR DATOS DE MAacuteS DE UN HOST SI HAY VARIAS MAacuteQUINAS ordmDEBE HABER COMUNICACIOacuteN ENTONCES UDP PUEDE SER MAacuteS CONVENIENTE QUE OTROS MECANISMOS COMO TCP

ordm

8

COMUNICACIOacuteN BASADA EN DATAGRAMAS

UN DATAGRAMA ES TRANSMITIDO ENTRE PROCESOS CUANDO UN PROCESO LO ENVIacuteA Y OTRO PROCESO LO RECIBE CUALQUIER PROCESO QUE NECESITE ENVIAR O RECIBIR MENSAJES DEBE EN PRIMER LUGAR CREAR UN SOCKET A UNA DIRECCIOacuteN DE HOST Y UN PUERTO LOCAL

UN SERVIDOR ENLAZARAacute ESE SOCKET A UN PUERTO SERVIDOR ndash IDENTIFICANDO AL CLIENTE DE MANERA QUE PUEDAN ENVIAR MENSAJES AL MISMO UN CLIENTE ENLAZA SU SOCKET A CUALQUIER PUERTO LOCAL LIBRE EL MEacuteTODO RECEPTOR DEVUELVE LA HOST Y EL PUERTO DEL EMISOR ADEMAacuteS DEL MENSAJE PERMITIENDO A LOS RECEPTORES ENVIAR UNA RESPUESTA

9

10

Las clases Java para establecer comunicaciones mediante datagramas son1javanetDatagramPacket Permite enviar o recibir paquete 2 javanetDatagramSocket Permite crea un socket de datagrama con destino al puerto x

MEacuteTODOS

bull INETADDRESS GETADDRESS() - DEVUELVE LA DIRECCIOacuteN IP DESDE QUE UNDATAGRAMPACKET FUE ENVIADO O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) LA DIRECCIOacuteN IP DE DESTINO

bull BYTE [] GETDATA () - DEVUELVE EL CONTENIDO DE LA DATAGRAMPACKET REPRESENTADO COMO UNA MATRIZ DE BYTES

bull INT GETLENGTH INT () - DEVUELVE LA LONGITUD DE LOS DATOS ALMACENADOS EN UN DATAGRAMPACKET ESTO PUEDE SER MENOR QUE EL TAMANtildeO REAL DEL BUacuteFER DE DATOS

bull INT GETPORT () - DEVUELVE EL NUacuteMERO DE PUERTO DESDE DONDE SE ENVIOacute UN DATAGRAMPACKET O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) EL NUacuteMERO DE PUERTO DE DESTINO

bull SETADDRESS (INETADDRESS ADDR) - ASIGNA UNA NUEVA DIRECCIOacuteN DE DESTINO A UN DATAGRAMPACKET

bull SETDATA (BYTE [] BUFFER) - ASIGNA UN BUFFER DE DATOS NUEVOS A LA DATAGRAMPACKET

bull SETLENGTH (INT LENGTH) - ASIGNA UNA NUEVA LONGITUD DE LA DATAGRAMPACKET

bull SETPORT (INT PORT) - ASIGNA UN PUERTO DE DESTINO A UN NUEVO DATAGRAMPACKET

11

bull JAVA PROPORCIONA CLASES PARA DAR SOPORTE A LA COMUNICACIOacuteN VIacuteA DATAGRAMAS UDP TODAS ELLAS CONTENIDAS EN EL PAQUETE JAVANET

bull ESTAS CLASES SON

bull DATAGRAMSOCKET

bull DATAGRAMPACKET

12

CLASE DATAGRAMSOCKET

bull LA CLASE DATAGRAMSOCKET PROPORCIONA ACCESO A UN SOCKET UDP LO QUE PERMITE QUE LOS PAQUETES UDP PUEDAN SER ENVIADOS Y RECIBIDOS

bull EL MISMO DATAGRAMSOCKET PUEDE SER USADO PARA RECIBIR LOS PAQUETES TANTO COMO PARA ENVIARLOS

13

14

bull DatagramSocket() constructor sin argumentos que permite que el sistema elija un puerto entre los que esteacuten libres y selecciona una de las direcciones locales

bull DatagramSocket(int port) constructor que toma un nuacutemero de puerto como argumento apropiado para los procesos que necesitan un nuacutemero de puerto (servicios)

bull DatagramSocket(int port InetAddress laddr) constructor que toma como argumentos el nuacutemero de puerto y una determinada direccioacuten local

DatagramSocket maneja sockets para enviar y recibir datagramas UDP Proporciona tres constructores

MEacuteTODOS DE LA CLASE DATAGRAMSOCKET

bull SEND(DATAGRAMPACKET P) Y RECEIVE(DATAGRAMPACKET P) ESTOS MEacuteTODOS SIRVEN PARA TRANSMITIR DATAGRAMAS ENTRE UN PAR DE CONECTORES EL ARGUMENTO DE SEND ES UNA INSTANCIA DE DATAGRAMPACKET CONTENIENDO EL MENSAJE Y EL DESTINO EL ARGUMENTO DE RECEIVE ES UN DATAGRAMPACKET VACIacuteO EN EL QUE COLOCAR EL MENSAJE SU LONGITUD Y SU ORIGEN

bull SETSOTIMEOUT(INT TIMEOUT) ESTE MEacuteTODO PERMITE ESTABLECER UN TIEMPO DE ESPERA LIacuteMITE CUANDO SE FIJA UN LIacuteMITE EL MEacuteTODO RECEIVE SE BLOQUEA DURANTE EL TIEMPO FIJADO Y DESPUEacuteS LANZA UNA EXCEPCIOacuteN INTERRUPTEDIOEXCEPTION

bull CONNECT(INETADDRESS ADDRESS INT PORT) ESTE MEacuteTODO SE UTILIZA PARA CONECTARSE A UN PUERTO REMOTO Y A UNA DIRECCIOacuteN INTERNET CONCRETOS EN CUYO CASO EL CONECTOR SOacuteLO PODRAacute ENVIAR Y RECIBIR MENSAJES DE ESA DIRECCIOacuteN 15

ENVIAR Y RECIBIR LOS DATAGRAMPACKET

PARA ENVIAR EL DATAGRAMPACKET DEBEMOS LLAMAR AL MEacuteTODO SEND() DE DATAGRAMSOCKET PASANDO COMO PARAacuteMETRO EL DATAGRAMPACKET QUE ACABAMOS DE CREAR

ENVIAR DATAGRAMPACKET

SOCKETSEND(DATO)

bullPARA RECIBIR IGUAL PERO CON SOCKETRECEIVE()

RECIBIR DATAGRAMPACKET

SOCKETRECEIVE(DATO)

16

MEacuteTODOSbull CLOSE() - CIERRA UN SOCKET Y SE DESLIGA DEL PUERTO LOCAL

bull CONNECT (INETADDRESS REMOTE_ADDR REMOTE_PORT INT) ndash RESTRINGE EL ACCESO A LA DIRECCIOacuteN ESPECIFICADA A DISTANCIA Y EL PUERTO

bull DISCONNECT() - DESCONECTA EL DATAGRAMSOCKET

bull INETADDRESS GETINETADDRESS () - DEVUELVE LA DIRECCIOacuteN REMOTA A LA QUE EL SOCKET ESTAacute CONECTADO O NULL SI NO EXISTE NINGUNA TAL CONEXIOacuteN

bull INT GETPORT () - DEVUELVE EL PUERTO REMOTO AL QUE ESTAacute CONECTADO EL SOCKET O -1 SI NO EXISTE DICHA CONEXIOacuteN

bull INETADDRESS GETLOCALADDRESS () - DEVUELVE LA DIRECCIOacuteN LOCAL A LA QUE EL SOCKET ESTA ENLAZADO

bull INT GETLOCALPORT () - DEVUELVE EL PUERTO LOCAL AL QUE ESTAacute ENLAZADO EL CONECTOR

bull INT GETRECEIVEBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION ndash DEVUELVE EL TAMANtildeO MAacuteXIMO DEL BUacuteFER UTILIZADO PARA LOS PAQUETES UDP ENTRANTES

bull INT GETSENDBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL TAMANtildeO MAacuteXIMO DE BUacuteFER UTILIZADO PARA PAQUETES UDP SALIENTES

bull GETSOTIMEOUT INT () THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL VALOR DE LA OPCIOacuteN DE CONECTOR DE TIEMPO DE ESPERA ESTE VALOR SE UTILIZA PARA DETERMINAR EL NUacuteMERO DE MILISEGUNDOS QUE UNA OPERACIOacuteN DE LECTURA BLOQUEARA ANTES DE LANZAR UN JAVAIOINTERRUPTEDIOEXCEPTION DE MANERA PREDETERMINADA ESTE VALOR SERAacute IGUAL A CERO LO QUE INDICA QUE EL BLOQUEO DE E S SE UTILIZARAacute

bull RECEIVE (DATAGRAMPACKET PACKET)) THROWS JAVAIOIOEXCEPTION- LEE UN PAQUETE UDP Y ALMACENA EL CONTENIDO EN EL PAQUETE ESPECIFICADO LA DIRECCIOacuteN Y EL PUERTO

17

CLASE DATAGRAMPACKET

bull UN DATAGRAMPACKET SE UTILIZA PARA REPRESENTAR UN PAQUETE UDP Y DEBE SER CREADO ANTES DE RECIBIR LOS PAQUETES

bull PROPORCIONAN CONSTRUCTORES PARA CREAR INSTANCIAS A PARTIR DE LOS DATAGRAMAS RECIBIDOS Y PARA CREAR INSTANCIAS DE DATAGRAMAS QUE VAN A SER ENVIADOS

18

19

Estos constructores crean una instancia de datagrama compuesta por una cadena de bytes que almacena el mensaje la longitud del mensaje y la direccioacuten de Internet y el nuacutemero de puerto local del conector destino tal y como sigue

1Constructores para datagramas que van a ser enviados

DatagramPacket(byte[] buf int length)

DatagramPacket(byte[] buf int length InetAddress address int port)

DatagramPacket

20

2Constructores para datagramas recibido

DatagramPacket(byte[] buf int offset int length)

DatagramPacket(byte[] buf int offset int length InetAddress address int port) Estos constructores nos permiten crear instancias de los datagramas recibidos especificando la cadena de bytes en la que alojar el mensaje la longitud de la misma y el offset dentro de la cadena

Dentro de esta clase hay meacutetodos para obtener los diferentes componentes de un datagrama tanto recibido como enviado

1getData() para obtener el mensaje contenido en el datagrama2getAddress() para obtener la direccioacuten IP3getPort() para obtener el puerto

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 8: Sockets en JAVA

UN SOCKET

ES UNA REFERENCIA INDIRECTA A UN PUERTO PARTICULAR USADA POR EL PROCESO RECEPTOR EN LA MAacuteQUINA RECEPTORA

LOS SOCKETS UDP PUEDE RECIBIR DATOS DE MAacuteS DE UN HOST SI HAY VARIAS MAacuteQUINAS ordmDEBE HABER COMUNICACIOacuteN ENTONCES UDP PUEDE SER MAacuteS CONVENIENTE QUE OTROS MECANISMOS COMO TCP

ordm

8

COMUNICACIOacuteN BASADA EN DATAGRAMAS

UN DATAGRAMA ES TRANSMITIDO ENTRE PROCESOS CUANDO UN PROCESO LO ENVIacuteA Y OTRO PROCESO LO RECIBE CUALQUIER PROCESO QUE NECESITE ENVIAR O RECIBIR MENSAJES DEBE EN PRIMER LUGAR CREAR UN SOCKET A UNA DIRECCIOacuteN DE HOST Y UN PUERTO LOCAL

UN SERVIDOR ENLAZARAacute ESE SOCKET A UN PUERTO SERVIDOR ndash IDENTIFICANDO AL CLIENTE DE MANERA QUE PUEDAN ENVIAR MENSAJES AL MISMO UN CLIENTE ENLAZA SU SOCKET A CUALQUIER PUERTO LOCAL LIBRE EL MEacuteTODO RECEPTOR DEVUELVE LA HOST Y EL PUERTO DEL EMISOR ADEMAacuteS DEL MENSAJE PERMITIENDO A LOS RECEPTORES ENVIAR UNA RESPUESTA

9

10

Las clases Java para establecer comunicaciones mediante datagramas son1javanetDatagramPacket Permite enviar o recibir paquete 2 javanetDatagramSocket Permite crea un socket de datagrama con destino al puerto x

MEacuteTODOS

bull INETADDRESS GETADDRESS() - DEVUELVE LA DIRECCIOacuteN IP DESDE QUE UNDATAGRAMPACKET FUE ENVIADO O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) LA DIRECCIOacuteN IP DE DESTINO

bull BYTE [] GETDATA () - DEVUELVE EL CONTENIDO DE LA DATAGRAMPACKET REPRESENTADO COMO UNA MATRIZ DE BYTES

bull INT GETLENGTH INT () - DEVUELVE LA LONGITUD DE LOS DATOS ALMACENADOS EN UN DATAGRAMPACKET ESTO PUEDE SER MENOR QUE EL TAMANtildeO REAL DEL BUacuteFER DE DATOS

bull INT GETPORT () - DEVUELVE EL NUacuteMERO DE PUERTO DESDE DONDE SE ENVIOacute UN DATAGRAMPACKET O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) EL NUacuteMERO DE PUERTO DE DESTINO

bull SETADDRESS (INETADDRESS ADDR) - ASIGNA UNA NUEVA DIRECCIOacuteN DE DESTINO A UN DATAGRAMPACKET

bull SETDATA (BYTE [] BUFFER) - ASIGNA UN BUFFER DE DATOS NUEVOS A LA DATAGRAMPACKET

bull SETLENGTH (INT LENGTH) - ASIGNA UNA NUEVA LONGITUD DE LA DATAGRAMPACKET

bull SETPORT (INT PORT) - ASIGNA UN PUERTO DE DESTINO A UN NUEVO DATAGRAMPACKET

11

bull JAVA PROPORCIONA CLASES PARA DAR SOPORTE A LA COMUNICACIOacuteN VIacuteA DATAGRAMAS UDP TODAS ELLAS CONTENIDAS EN EL PAQUETE JAVANET

bull ESTAS CLASES SON

bull DATAGRAMSOCKET

bull DATAGRAMPACKET

12

CLASE DATAGRAMSOCKET

bull LA CLASE DATAGRAMSOCKET PROPORCIONA ACCESO A UN SOCKET UDP LO QUE PERMITE QUE LOS PAQUETES UDP PUEDAN SER ENVIADOS Y RECIBIDOS

bull EL MISMO DATAGRAMSOCKET PUEDE SER USADO PARA RECIBIR LOS PAQUETES TANTO COMO PARA ENVIARLOS

13

14

bull DatagramSocket() constructor sin argumentos que permite que el sistema elija un puerto entre los que esteacuten libres y selecciona una de las direcciones locales

bull DatagramSocket(int port) constructor que toma un nuacutemero de puerto como argumento apropiado para los procesos que necesitan un nuacutemero de puerto (servicios)

bull DatagramSocket(int port InetAddress laddr) constructor que toma como argumentos el nuacutemero de puerto y una determinada direccioacuten local

DatagramSocket maneja sockets para enviar y recibir datagramas UDP Proporciona tres constructores

MEacuteTODOS DE LA CLASE DATAGRAMSOCKET

bull SEND(DATAGRAMPACKET P) Y RECEIVE(DATAGRAMPACKET P) ESTOS MEacuteTODOS SIRVEN PARA TRANSMITIR DATAGRAMAS ENTRE UN PAR DE CONECTORES EL ARGUMENTO DE SEND ES UNA INSTANCIA DE DATAGRAMPACKET CONTENIENDO EL MENSAJE Y EL DESTINO EL ARGUMENTO DE RECEIVE ES UN DATAGRAMPACKET VACIacuteO EN EL QUE COLOCAR EL MENSAJE SU LONGITUD Y SU ORIGEN

bull SETSOTIMEOUT(INT TIMEOUT) ESTE MEacuteTODO PERMITE ESTABLECER UN TIEMPO DE ESPERA LIacuteMITE CUANDO SE FIJA UN LIacuteMITE EL MEacuteTODO RECEIVE SE BLOQUEA DURANTE EL TIEMPO FIJADO Y DESPUEacuteS LANZA UNA EXCEPCIOacuteN INTERRUPTEDIOEXCEPTION

bull CONNECT(INETADDRESS ADDRESS INT PORT) ESTE MEacuteTODO SE UTILIZA PARA CONECTARSE A UN PUERTO REMOTO Y A UNA DIRECCIOacuteN INTERNET CONCRETOS EN CUYO CASO EL CONECTOR SOacuteLO PODRAacute ENVIAR Y RECIBIR MENSAJES DE ESA DIRECCIOacuteN 15

ENVIAR Y RECIBIR LOS DATAGRAMPACKET

PARA ENVIAR EL DATAGRAMPACKET DEBEMOS LLAMAR AL MEacuteTODO SEND() DE DATAGRAMSOCKET PASANDO COMO PARAacuteMETRO EL DATAGRAMPACKET QUE ACABAMOS DE CREAR

ENVIAR DATAGRAMPACKET

SOCKETSEND(DATO)

bullPARA RECIBIR IGUAL PERO CON SOCKETRECEIVE()

RECIBIR DATAGRAMPACKET

SOCKETRECEIVE(DATO)

16

MEacuteTODOSbull CLOSE() - CIERRA UN SOCKET Y SE DESLIGA DEL PUERTO LOCAL

bull CONNECT (INETADDRESS REMOTE_ADDR REMOTE_PORT INT) ndash RESTRINGE EL ACCESO A LA DIRECCIOacuteN ESPECIFICADA A DISTANCIA Y EL PUERTO

bull DISCONNECT() - DESCONECTA EL DATAGRAMSOCKET

bull INETADDRESS GETINETADDRESS () - DEVUELVE LA DIRECCIOacuteN REMOTA A LA QUE EL SOCKET ESTAacute CONECTADO O NULL SI NO EXISTE NINGUNA TAL CONEXIOacuteN

bull INT GETPORT () - DEVUELVE EL PUERTO REMOTO AL QUE ESTAacute CONECTADO EL SOCKET O -1 SI NO EXISTE DICHA CONEXIOacuteN

bull INETADDRESS GETLOCALADDRESS () - DEVUELVE LA DIRECCIOacuteN LOCAL A LA QUE EL SOCKET ESTA ENLAZADO

bull INT GETLOCALPORT () - DEVUELVE EL PUERTO LOCAL AL QUE ESTAacute ENLAZADO EL CONECTOR

bull INT GETRECEIVEBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION ndash DEVUELVE EL TAMANtildeO MAacuteXIMO DEL BUacuteFER UTILIZADO PARA LOS PAQUETES UDP ENTRANTES

bull INT GETSENDBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL TAMANtildeO MAacuteXIMO DE BUacuteFER UTILIZADO PARA PAQUETES UDP SALIENTES

bull GETSOTIMEOUT INT () THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL VALOR DE LA OPCIOacuteN DE CONECTOR DE TIEMPO DE ESPERA ESTE VALOR SE UTILIZA PARA DETERMINAR EL NUacuteMERO DE MILISEGUNDOS QUE UNA OPERACIOacuteN DE LECTURA BLOQUEARA ANTES DE LANZAR UN JAVAIOINTERRUPTEDIOEXCEPTION DE MANERA PREDETERMINADA ESTE VALOR SERAacute IGUAL A CERO LO QUE INDICA QUE EL BLOQUEO DE E S SE UTILIZARAacute

bull RECEIVE (DATAGRAMPACKET PACKET)) THROWS JAVAIOIOEXCEPTION- LEE UN PAQUETE UDP Y ALMACENA EL CONTENIDO EN EL PAQUETE ESPECIFICADO LA DIRECCIOacuteN Y EL PUERTO

17

CLASE DATAGRAMPACKET

bull UN DATAGRAMPACKET SE UTILIZA PARA REPRESENTAR UN PAQUETE UDP Y DEBE SER CREADO ANTES DE RECIBIR LOS PAQUETES

bull PROPORCIONAN CONSTRUCTORES PARA CREAR INSTANCIAS A PARTIR DE LOS DATAGRAMAS RECIBIDOS Y PARA CREAR INSTANCIAS DE DATAGRAMAS QUE VAN A SER ENVIADOS

18

19

Estos constructores crean una instancia de datagrama compuesta por una cadena de bytes que almacena el mensaje la longitud del mensaje y la direccioacuten de Internet y el nuacutemero de puerto local del conector destino tal y como sigue

1Constructores para datagramas que van a ser enviados

DatagramPacket(byte[] buf int length)

DatagramPacket(byte[] buf int length InetAddress address int port)

DatagramPacket

20

2Constructores para datagramas recibido

DatagramPacket(byte[] buf int offset int length)

DatagramPacket(byte[] buf int offset int length InetAddress address int port) Estos constructores nos permiten crear instancias de los datagramas recibidos especificando la cadena de bytes en la que alojar el mensaje la longitud de la misma y el offset dentro de la cadena

Dentro de esta clase hay meacutetodos para obtener los diferentes componentes de un datagrama tanto recibido como enviado

1getData() para obtener el mensaje contenido en el datagrama2getAddress() para obtener la direccioacuten IP3getPort() para obtener el puerto

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 9: Sockets en JAVA

COMUNICACIOacuteN BASADA EN DATAGRAMAS

UN DATAGRAMA ES TRANSMITIDO ENTRE PROCESOS CUANDO UN PROCESO LO ENVIacuteA Y OTRO PROCESO LO RECIBE CUALQUIER PROCESO QUE NECESITE ENVIAR O RECIBIR MENSAJES DEBE EN PRIMER LUGAR CREAR UN SOCKET A UNA DIRECCIOacuteN DE HOST Y UN PUERTO LOCAL

UN SERVIDOR ENLAZARAacute ESE SOCKET A UN PUERTO SERVIDOR ndash IDENTIFICANDO AL CLIENTE DE MANERA QUE PUEDAN ENVIAR MENSAJES AL MISMO UN CLIENTE ENLAZA SU SOCKET A CUALQUIER PUERTO LOCAL LIBRE EL MEacuteTODO RECEPTOR DEVUELVE LA HOST Y EL PUERTO DEL EMISOR ADEMAacuteS DEL MENSAJE PERMITIENDO A LOS RECEPTORES ENVIAR UNA RESPUESTA

9

10

Las clases Java para establecer comunicaciones mediante datagramas son1javanetDatagramPacket Permite enviar o recibir paquete 2 javanetDatagramSocket Permite crea un socket de datagrama con destino al puerto x

MEacuteTODOS

bull INETADDRESS GETADDRESS() - DEVUELVE LA DIRECCIOacuteN IP DESDE QUE UNDATAGRAMPACKET FUE ENVIADO O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) LA DIRECCIOacuteN IP DE DESTINO

bull BYTE [] GETDATA () - DEVUELVE EL CONTENIDO DE LA DATAGRAMPACKET REPRESENTADO COMO UNA MATRIZ DE BYTES

bull INT GETLENGTH INT () - DEVUELVE LA LONGITUD DE LOS DATOS ALMACENADOS EN UN DATAGRAMPACKET ESTO PUEDE SER MENOR QUE EL TAMANtildeO REAL DEL BUacuteFER DE DATOS

bull INT GETPORT () - DEVUELVE EL NUacuteMERO DE PUERTO DESDE DONDE SE ENVIOacute UN DATAGRAMPACKET O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) EL NUacuteMERO DE PUERTO DE DESTINO

bull SETADDRESS (INETADDRESS ADDR) - ASIGNA UNA NUEVA DIRECCIOacuteN DE DESTINO A UN DATAGRAMPACKET

bull SETDATA (BYTE [] BUFFER) - ASIGNA UN BUFFER DE DATOS NUEVOS A LA DATAGRAMPACKET

bull SETLENGTH (INT LENGTH) - ASIGNA UNA NUEVA LONGITUD DE LA DATAGRAMPACKET

bull SETPORT (INT PORT) - ASIGNA UN PUERTO DE DESTINO A UN NUEVO DATAGRAMPACKET

11

bull JAVA PROPORCIONA CLASES PARA DAR SOPORTE A LA COMUNICACIOacuteN VIacuteA DATAGRAMAS UDP TODAS ELLAS CONTENIDAS EN EL PAQUETE JAVANET

bull ESTAS CLASES SON

bull DATAGRAMSOCKET

bull DATAGRAMPACKET

12

CLASE DATAGRAMSOCKET

bull LA CLASE DATAGRAMSOCKET PROPORCIONA ACCESO A UN SOCKET UDP LO QUE PERMITE QUE LOS PAQUETES UDP PUEDAN SER ENVIADOS Y RECIBIDOS

bull EL MISMO DATAGRAMSOCKET PUEDE SER USADO PARA RECIBIR LOS PAQUETES TANTO COMO PARA ENVIARLOS

13

14

bull DatagramSocket() constructor sin argumentos que permite que el sistema elija un puerto entre los que esteacuten libres y selecciona una de las direcciones locales

bull DatagramSocket(int port) constructor que toma un nuacutemero de puerto como argumento apropiado para los procesos que necesitan un nuacutemero de puerto (servicios)

bull DatagramSocket(int port InetAddress laddr) constructor que toma como argumentos el nuacutemero de puerto y una determinada direccioacuten local

DatagramSocket maneja sockets para enviar y recibir datagramas UDP Proporciona tres constructores

MEacuteTODOS DE LA CLASE DATAGRAMSOCKET

bull SEND(DATAGRAMPACKET P) Y RECEIVE(DATAGRAMPACKET P) ESTOS MEacuteTODOS SIRVEN PARA TRANSMITIR DATAGRAMAS ENTRE UN PAR DE CONECTORES EL ARGUMENTO DE SEND ES UNA INSTANCIA DE DATAGRAMPACKET CONTENIENDO EL MENSAJE Y EL DESTINO EL ARGUMENTO DE RECEIVE ES UN DATAGRAMPACKET VACIacuteO EN EL QUE COLOCAR EL MENSAJE SU LONGITUD Y SU ORIGEN

bull SETSOTIMEOUT(INT TIMEOUT) ESTE MEacuteTODO PERMITE ESTABLECER UN TIEMPO DE ESPERA LIacuteMITE CUANDO SE FIJA UN LIacuteMITE EL MEacuteTODO RECEIVE SE BLOQUEA DURANTE EL TIEMPO FIJADO Y DESPUEacuteS LANZA UNA EXCEPCIOacuteN INTERRUPTEDIOEXCEPTION

bull CONNECT(INETADDRESS ADDRESS INT PORT) ESTE MEacuteTODO SE UTILIZA PARA CONECTARSE A UN PUERTO REMOTO Y A UNA DIRECCIOacuteN INTERNET CONCRETOS EN CUYO CASO EL CONECTOR SOacuteLO PODRAacute ENVIAR Y RECIBIR MENSAJES DE ESA DIRECCIOacuteN 15

ENVIAR Y RECIBIR LOS DATAGRAMPACKET

PARA ENVIAR EL DATAGRAMPACKET DEBEMOS LLAMAR AL MEacuteTODO SEND() DE DATAGRAMSOCKET PASANDO COMO PARAacuteMETRO EL DATAGRAMPACKET QUE ACABAMOS DE CREAR

ENVIAR DATAGRAMPACKET

SOCKETSEND(DATO)

bullPARA RECIBIR IGUAL PERO CON SOCKETRECEIVE()

RECIBIR DATAGRAMPACKET

SOCKETRECEIVE(DATO)

16

MEacuteTODOSbull CLOSE() - CIERRA UN SOCKET Y SE DESLIGA DEL PUERTO LOCAL

bull CONNECT (INETADDRESS REMOTE_ADDR REMOTE_PORT INT) ndash RESTRINGE EL ACCESO A LA DIRECCIOacuteN ESPECIFICADA A DISTANCIA Y EL PUERTO

bull DISCONNECT() - DESCONECTA EL DATAGRAMSOCKET

bull INETADDRESS GETINETADDRESS () - DEVUELVE LA DIRECCIOacuteN REMOTA A LA QUE EL SOCKET ESTAacute CONECTADO O NULL SI NO EXISTE NINGUNA TAL CONEXIOacuteN

bull INT GETPORT () - DEVUELVE EL PUERTO REMOTO AL QUE ESTAacute CONECTADO EL SOCKET O -1 SI NO EXISTE DICHA CONEXIOacuteN

bull INETADDRESS GETLOCALADDRESS () - DEVUELVE LA DIRECCIOacuteN LOCAL A LA QUE EL SOCKET ESTA ENLAZADO

bull INT GETLOCALPORT () - DEVUELVE EL PUERTO LOCAL AL QUE ESTAacute ENLAZADO EL CONECTOR

bull INT GETRECEIVEBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION ndash DEVUELVE EL TAMANtildeO MAacuteXIMO DEL BUacuteFER UTILIZADO PARA LOS PAQUETES UDP ENTRANTES

bull INT GETSENDBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL TAMANtildeO MAacuteXIMO DE BUacuteFER UTILIZADO PARA PAQUETES UDP SALIENTES

bull GETSOTIMEOUT INT () THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL VALOR DE LA OPCIOacuteN DE CONECTOR DE TIEMPO DE ESPERA ESTE VALOR SE UTILIZA PARA DETERMINAR EL NUacuteMERO DE MILISEGUNDOS QUE UNA OPERACIOacuteN DE LECTURA BLOQUEARA ANTES DE LANZAR UN JAVAIOINTERRUPTEDIOEXCEPTION DE MANERA PREDETERMINADA ESTE VALOR SERAacute IGUAL A CERO LO QUE INDICA QUE EL BLOQUEO DE E S SE UTILIZARAacute

bull RECEIVE (DATAGRAMPACKET PACKET)) THROWS JAVAIOIOEXCEPTION- LEE UN PAQUETE UDP Y ALMACENA EL CONTENIDO EN EL PAQUETE ESPECIFICADO LA DIRECCIOacuteN Y EL PUERTO

17

CLASE DATAGRAMPACKET

bull UN DATAGRAMPACKET SE UTILIZA PARA REPRESENTAR UN PAQUETE UDP Y DEBE SER CREADO ANTES DE RECIBIR LOS PAQUETES

bull PROPORCIONAN CONSTRUCTORES PARA CREAR INSTANCIAS A PARTIR DE LOS DATAGRAMAS RECIBIDOS Y PARA CREAR INSTANCIAS DE DATAGRAMAS QUE VAN A SER ENVIADOS

18

19

Estos constructores crean una instancia de datagrama compuesta por una cadena de bytes que almacena el mensaje la longitud del mensaje y la direccioacuten de Internet y el nuacutemero de puerto local del conector destino tal y como sigue

1Constructores para datagramas que van a ser enviados

DatagramPacket(byte[] buf int length)

DatagramPacket(byte[] buf int length InetAddress address int port)

DatagramPacket

20

2Constructores para datagramas recibido

DatagramPacket(byte[] buf int offset int length)

DatagramPacket(byte[] buf int offset int length InetAddress address int port) Estos constructores nos permiten crear instancias de los datagramas recibidos especificando la cadena de bytes en la que alojar el mensaje la longitud de la misma y el offset dentro de la cadena

Dentro de esta clase hay meacutetodos para obtener los diferentes componentes de un datagrama tanto recibido como enviado

1getData() para obtener el mensaje contenido en el datagrama2getAddress() para obtener la direccioacuten IP3getPort() para obtener el puerto

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 10: Sockets en JAVA

10

Las clases Java para establecer comunicaciones mediante datagramas son1javanetDatagramPacket Permite enviar o recibir paquete 2 javanetDatagramSocket Permite crea un socket de datagrama con destino al puerto x

MEacuteTODOS

bull INETADDRESS GETADDRESS() - DEVUELVE LA DIRECCIOacuteN IP DESDE QUE UNDATAGRAMPACKET FUE ENVIADO O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) LA DIRECCIOacuteN IP DE DESTINO

bull BYTE [] GETDATA () - DEVUELVE EL CONTENIDO DE LA DATAGRAMPACKET REPRESENTADO COMO UNA MATRIZ DE BYTES

bull INT GETLENGTH INT () - DEVUELVE LA LONGITUD DE LOS DATOS ALMACENADOS EN UN DATAGRAMPACKET ESTO PUEDE SER MENOR QUE EL TAMANtildeO REAL DEL BUacuteFER DE DATOS

bull INT GETPORT () - DEVUELVE EL NUacuteMERO DE PUERTO DESDE DONDE SE ENVIOacute UN DATAGRAMPACKET O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) EL NUacuteMERO DE PUERTO DE DESTINO

bull SETADDRESS (INETADDRESS ADDR) - ASIGNA UNA NUEVA DIRECCIOacuteN DE DESTINO A UN DATAGRAMPACKET

bull SETDATA (BYTE [] BUFFER) - ASIGNA UN BUFFER DE DATOS NUEVOS A LA DATAGRAMPACKET

bull SETLENGTH (INT LENGTH) - ASIGNA UNA NUEVA LONGITUD DE LA DATAGRAMPACKET

bull SETPORT (INT PORT) - ASIGNA UN PUERTO DE DESTINO A UN NUEVO DATAGRAMPACKET

11

bull JAVA PROPORCIONA CLASES PARA DAR SOPORTE A LA COMUNICACIOacuteN VIacuteA DATAGRAMAS UDP TODAS ELLAS CONTENIDAS EN EL PAQUETE JAVANET

bull ESTAS CLASES SON

bull DATAGRAMSOCKET

bull DATAGRAMPACKET

12

CLASE DATAGRAMSOCKET

bull LA CLASE DATAGRAMSOCKET PROPORCIONA ACCESO A UN SOCKET UDP LO QUE PERMITE QUE LOS PAQUETES UDP PUEDAN SER ENVIADOS Y RECIBIDOS

bull EL MISMO DATAGRAMSOCKET PUEDE SER USADO PARA RECIBIR LOS PAQUETES TANTO COMO PARA ENVIARLOS

13

14

bull DatagramSocket() constructor sin argumentos que permite que el sistema elija un puerto entre los que esteacuten libres y selecciona una de las direcciones locales

bull DatagramSocket(int port) constructor que toma un nuacutemero de puerto como argumento apropiado para los procesos que necesitan un nuacutemero de puerto (servicios)

bull DatagramSocket(int port InetAddress laddr) constructor que toma como argumentos el nuacutemero de puerto y una determinada direccioacuten local

DatagramSocket maneja sockets para enviar y recibir datagramas UDP Proporciona tres constructores

MEacuteTODOS DE LA CLASE DATAGRAMSOCKET

bull SEND(DATAGRAMPACKET P) Y RECEIVE(DATAGRAMPACKET P) ESTOS MEacuteTODOS SIRVEN PARA TRANSMITIR DATAGRAMAS ENTRE UN PAR DE CONECTORES EL ARGUMENTO DE SEND ES UNA INSTANCIA DE DATAGRAMPACKET CONTENIENDO EL MENSAJE Y EL DESTINO EL ARGUMENTO DE RECEIVE ES UN DATAGRAMPACKET VACIacuteO EN EL QUE COLOCAR EL MENSAJE SU LONGITUD Y SU ORIGEN

bull SETSOTIMEOUT(INT TIMEOUT) ESTE MEacuteTODO PERMITE ESTABLECER UN TIEMPO DE ESPERA LIacuteMITE CUANDO SE FIJA UN LIacuteMITE EL MEacuteTODO RECEIVE SE BLOQUEA DURANTE EL TIEMPO FIJADO Y DESPUEacuteS LANZA UNA EXCEPCIOacuteN INTERRUPTEDIOEXCEPTION

bull CONNECT(INETADDRESS ADDRESS INT PORT) ESTE MEacuteTODO SE UTILIZA PARA CONECTARSE A UN PUERTO REMOTO Y A UNA DIRECCIOacuteN INTERNET CONCRETOS EN CUYO CASO EL CONECTOR SOacuteLO PODRAacute ENVIAR Y RECIBIR MENSAJES DE ESA DIRECCIOacuteN 15

ENVIAR Y RECIBIR LOS DATAGRAMPACKET

PARA ENVIAR EL DATAGRAMPACKET DEBEMOS LLAMAR AL MEacuteTODO SEND() DE DATAGRAMSOCKET PASANDO COMO PARAacuteMETRO EL DATAGRAMPACKET QUE ACABAMOS DE CREAR

ENVIAR DATAGRAMPACKET

SOCKETSEND(DATO)

bullPARA RECIBIR IGUAL PERO CON SOCKETRECEIVE()

RECIBIR DATAGRAMPACKET

SOCKETRECEIVE(DATO)

16

MEacuteTODOSbull CLOSE() - CIERRA UN SOCKET Y SE DESLIGA DEL PUERTO LOCAL

bull CONNECT (INETADDRESS REMOTE_ADDR REMOTE_PORT INT) ndash RESTRINGE EL ACCESO A LA DIRECCIOacuteN ESPECIFICADA A DISTANCIA Y EL PUERTO

bull DISCONNECT() - DESCONECTA EL DATAGRAMSOCKET

bull INETADDRESS GETINETADDRESS () - DEVUELVE LA DIRECCIOacuteN REMOTA A LA QUE EL SOCKET ESTAacute CONECTADO O NULL SI NO EXISTE NINGUNA TAL CONEXIOacuteN

bull INT GETPORT () - DEVUELVE EL PUERTO REMOTO AL QUE ESTAacute CONECTADO EL SOCKET O -1 SI NO EXISTE DICHA CONEXIOacuteN

bull INETADDRESS GETLOCALADDRESS () - DEVUELVE LA DIRECCIOacuteN LOCAL A LA QUE EL SOCKET ESTA ENLAZADO

bull INT GETLOCALPORT () - DEVUELVE EL PUERTO LOCAL AL QUE ESTAacute ENLAZADO EL CONECTOR

bull INT GETRECEIVEBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION ndash DEVUELVE EL TAMANtildeO MAacuteXIMO DEL BUacuteFER UTILIZADO PARA LOS PAQUETES UDP ENTRANTES

bull INT GETSENDBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL TAMANtildeO MAacuteXIMO DE BUacuteFER UTILIZADO PARA PAQUETES UDP SALIENTES

bull GETSOTIMEOUT INT () THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL VALOR DE LA OPCIOacuteN DE CONECTOR DE TIEMPO DE ESPERA ESTE VALOR SE UTILIZA PARA DETERMINAR EL NUacuteMERO DE MILISEGUNDOS QUE UNA OPERACIOacuteN DE LECTURA BLOQUEARA ANTES DE LANZAR UN JAVAIOINTERRUPTEDIOEXCEPTION DE MANERA PREDETERMINADA ESTE VALOR SERAacute IGUAL A CERO LO QUE INDICA QUE EL BLOQUEO DE E S SE UTILIZARAacute

bull RECEIVE (DATAGRAMPACKET PACKET)) THROWS JAVAIOIOEXCEPTION- LEE UN PAQUETE UDP Y ALMACENA EL CONTENIDO EN EL PAQUETE ESPECIFICADO LA DIRECCIOacuteN Y EL PUERTO

17

CLASE DATAGRAMPACKET

bull UN DATAGRAMPACKET SE UTILIZA PARA REPRESENTAR UN PAQUETE UDP Y DEBE SER CREADO ANTES DE RECIBIR LOS PAQUETES

bull PROPORCIONAN CONSTRUCTORES PARA CREAR INSTANCIAS A PARTIR DE LOS DATAGRAMAS RECIBIDOS Y PARA CREAR INSTANCIAS DE DATAGRAMAS QUE VAN A SER ENVIADOS

18

19

Estos constructores crean una instancia de datagrama compuesta por una cadena de bytes que almacena el mensaje la longitud del mensaje y la direccioacuten de Internet y el nuacutemero de puerto local del conector destino tal y como sigue

1Constructores para datagramas que van a ser enviados

DatagramPacket(byte[] buf int length)

DatagramPacket(byte[] buf int length InetAddress address int port)

DatagramPacket

20

2Constructores para datagramas recibido

DatagramPacket(byte[] buf int offset int length)

DatagramPacket(byte[] buf int offset int length InetAddress address int port) Estos constructores nos permiten crear instancias de los datagramas recibidos especificando la cadena de bytes en la que alojar el mensaje la longitud de la misma y el offset dentro de la cadena

Dentro de esta clase hay meacutetodos para obtener los diferentes componentes de un datagrama tanto recibido como enviado

1getData() para obtener el mensaje contenido en el datagrama2getAddress() para obtener la direccioacuten IP3getPort() para obtener el puerto

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 11: Sockets en JAVA

MEacuteTODOS

bull INETADDRESS GETADDRESS() - DEVUELVE LA DIRECCIOacuteN IP DESDE QUE UNDATAGRAMPACKET FUE ENVIADO O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) LA DIRECCIOacuteN IP DE DESTINO

bull BYTE [] GETDATA () - DEVUELVE EL CONTENIDO DE LA DATAGRAMPACKET REPRESENTADO COMO UNA MATRIZ DE BYTES

bull INT GETLENGTH INT () - DEVUELVE LA LONGITUD DE LOS DATOS ALMACENADOS EN UN DATAGRAMPACKET ESTO PUEDE SER MENOR QUE EL TAMANtildeO REAL DEL BUacuteFER DE DATOS

bull INT GETPORT () - DEVUELVE EL NUacuteMERO DE PUERTO DESDE DONDE SE ENVIOacute UN DATAGRAMPACKET O (SI EL PAQUETE VA A SER ENVIADO A UNA MAacuteQUINA REMOTA) EL NUacuteMERO DE PUERTO DE DESTINO

bull SETADDRESS (INETADDRESS ADDR) - ASIGNA UNA NUEVA DIRECCIOacuteN DE DESTINO A UN DATAGRAMPACKET

bull SETDATA (BYTE [] BUFFER) - ASIGNA UN BUFFER DE DATOS NUEVOS A LA DATAGRAMPACKET

bull SETLENGTH (INT LENGTH) - ASIGNA UNA NUEVA LONGITUD DE LA DATAGRAMPACKET

bull SETPORT (INT PORT) - ASIGNA UN PUERTO DE DESTINO A UN NUEVO DATAGRAMPACKET

11

bull JAVA PROPORCIONA CLASES PARA DAR SOPORTE A LA COMUNICACIOacuteN VIacuteA DATAGRAMAS UDP TODAS ELLAS CONTENIDAS EN EL PAQUETE JAVANET

bull ESTAS CLASES SON

bull DATAGRAMSOCKET

bull DATAGRAMPACKET

12

CLASE DATAGRAMSOCKET

bull LA CLASE DATAGRAMSOCKET PROPORCIONA ACCESO A UN SOCKET UDP LO QUE PERMITE QUE LOS PAQUETES UDP PUEDAN SER ENVIADOS Y RECIBIDOS

bull EL MISMO DATAGRAMSOCKET PUEDE SER USADO PARA RECIBIR LOS PAQUETES TANTO COMO PARA ENVIARLOS

13

14

bull DatagramSocket() constructor sin argumentos que permite que el sistema elija un puerto entre los que esteacuten libres y selecciona una de las direcciones locales

bull DatagramSocket(int port) constructor que toma un nuacutemero de puerto como argumento apropiado para los procesos que necesitan un nuacutemero de puerto (servicios)

bull DatagramSocket(int port InetAddress laddr) constructor que toma como argumentos el nuacutemero de puerto y una determinada direccioacuten local

DatagramSocket maneja sockets para enviar y recibir datagramas UDP Proporciona tres constructores

MEacuteTODOS DE LA CLASE DATAGRAMSOCKET

bull SEND(DATAGRAMPACKET P) Y RECEIVE(DATAGRAMPACKET P) ESTOS MEacuteTODOS SIRVEN PARA TRANSMITIR DATAGRAMAS ENTRE UN PAR DE CONECTORES EL ARGUMENTO DE SEND ES UNA INSTANCIA DE DATAGRAMPACKET CONTENIENDO EL MENSAJE Y EL DESTINO EL ARGUMENTO DE RECEIVE ES UN DATAGRAMPACKET VACIacuteO EN EL QUE COLOCAR EL MENSAJE SU LONGITUD Y SU ORIGEN

bull SETSOTIMEOUT(INT TIMEOUT) ESTE MEacuteTODO PERMITE ESTABLECER UN TIEMPO DE ESPERA LIacuteMITE CUANDO SE FIJA UN LIacuteMITE EL MEacuteTODO RECEIVE SE BLOQUEA DURANTE EL TIEMPO FIJADO Y DESPUEacuteS LANZA UNA EXCEPCIOacuteN INTERRUPTEDIOEXCEPTION

bull CONNECT(INETADDRESS ADDRESS INT PORT) ESTE MEacuteTODO SE UTILIZA PARA CONECTARSE A UN PUERTO REMOTO Y A UNA DIRECCIOacuteN INTERNET CONCRETOS EN CUYO CASO EL CONECTOR SOacuteLO PODRAacute ENVIAR Y RECIBIR MENSAJES DE ESA DIRECCIOacuteN 15

ENVIAR Y RECIBIR LOS DATAGRAMPACKET

PARA ENVIAR EL DATAGRAMPACKET DEBEMOS LLAMAR AL MEacuteTODO SEND() DE DATAGRAMSOCKET PASANDO COMO PARAacuteMETRO EL DATAGRAMPACKET QUE ACABAMOS DE CREAR

ENVIAR DATAGRAMPACKET

SOCKETSEND(DATO)

bullPARA RECIBIR IGUAL PERO CON SOCKETRECEIVE()

RECIBIR DATAGRAMPACKET

SOCKETRECEIVE(DATO)

16

MEacuteTODOSbull CLOSE() - CIERRA UN SOCKET Y SE DESLIGA DEL PUERTO LOCAL

bull CONNECT (INETADDRESS REMOTE_ADDR REMOTE_PORT INT) ndash RESTRINGE EL ACCESO A LA DIRECCIOacuteN ESPECIFICADA A DISTANCIA Y EL PUERTO

bull DISCONNECT() - DESCONECTA EL DATAGRAMSOCKET

bull INETADDRESS GETINETADDRESS () - DEVUELVE LA DIRECCIOacuteN REMOTA A LA QUE EL SOCKET ESTAacute CONECTADO O NULL SI NO EXISTE NINGUNA TAL CONEXIOacuteN

bull INT GETPORT () - DEVUELVE EL PUERTO REMOTO AL QUE ESTAacute CONECTADO EL SOCKET O -1 SI NO EXISTE DICHA CONEXIOacuteN

bull INETADDRESS GETLOCALADDRESS () - DEVUELVE LA DIRECCIOacuteN LOCAL A LA QUE EL SOCKET ESTA ENLAZADO

bull INT GETLOCALPORT () - DEVUELVE EL PUERTO LOCAL AL QUE ESTAacute ENLAZADO EL CONECTOR

bull INT GETRECEIVEBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION ndash DEVUELVE EL TAMANtildeO MAacuteXIMO DEL BUacuteFER UTILIZADO PARA LOS PAQUETES UDP ENTRANTES

bull INT GETSENDBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL TAMANtildeO MAacuteXIMO DE BUacuteFER UTILIZADO PARA PAQUETES UDP SALIENTES

bull GETSOTIMEOUT INT () THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL VALOR DE LA OPCIOacuteN DE CONECTOR DE TIEMPO DE ESPERA ESTE VALOR SE UTILIZA PARA DETERMINAR EL NUacuteMERO DE MILISEGUNDOS QUE UNA OPERACIOacuteN DE LECTURA BLOQUEARA ANTES DE LANZAR UN JAVAIOINTERRUPTEDIOEXCEPTION DE MANERA PREDETERMINADA ESTE VALOR SERAacute IGUAL A CERO LO QUE INDICA QUE EL BLOQUEO DE E S SE UTILIZARAacute

bull RECEIVE (DATAGRAMPACKET PACKET)) THROWS JAVAIOIOEXCEPTION- LEE UN PAQUETE UDP Y ALMACENA EL CONTENIDO EN EL PAQUETE ESPECIFICADO LA DIRECCIOacuteN Y EL PUERTO

17

CLASE DATAGRAMPACKET

bull UN DATAGRAMPACKET SE UTILIZA PARA REPRESENTAR UN PAQUETE UDP Y DEBE SER CREADO ANTES DE RECIBIR LOS PAQUETES

bull PROPORCIONAN CONSTRUCTORES PARA CREAR INSTANCIAS A PARTIR DE LOS DATAGRAMAS RECIBIDOS Y PARA CREAR INSTANCIAS DE DATAGRAMAS QUE VAN A SER ENVIADOS

18

19

Estos constructores crean una instancia de datagrama compuesta por una cadena de bytes que almacena el mensaje la longitud del mensaje y la direccioacuten de Internet y el nuacutemero de puerto local del conector destino tal y como sigue

1Constructores para datagramas que van a ser enviados

DatagramPacket(byte[] buf int length)

DatagramPacket(byte[] buf int length InetAddress address int port)

DatagramPacket

20

2Constructores para datagramas recibido

DatagramPacket(byte[] buf int offset int length)

DatagramPacket(byte[] buf int offset int length InetAddress address int port) Estos constructores nos permiten crear instancias de los datagramas recibidos especificando la cadena de bytes en la que alojar el mensaje la longitud de la misma y el offset dentro de la cadena

Dentro de esta clase hay meacutetodos para obtener los diferentes componentes de un datagrama tanto recibido como enviado

1getData() para obtener el mensaje contenido en el datagrama2getAddress() para obtener la direccioacuten IP3getPort() para obtener el puerto

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 12: Sockets en JAVA

bull JAVA PROPORCIONA CLASES PARA DAR SOPORTE A LA COMUNICACIOacuteN VIacuteA DATAGRAMAS UDP TODAS ELLAS CONTENIDAS EN EL PAQUETE JAVANET

bull ESTAS CLASES SON

bull DATAGRAMSOCKET

bull DATAGRAMPACKET

12

CLASE DATAGRAMSOCKET

bull LA CLASE DATAGRAMSOCKET PROPORCIONA ACCESO A UN SOCKET UDP LO QUE PERMITE QUE LOS PAQUETES UDP PUEDAN SER ENVIADOS Y RECIBIDOS

bull EL MISMO DATAGRAMSOCKET PUEDE SER USADO PARA RECIBIR LOS PAQUETES TANTO COMO PARA ENVIARLOS

13

14

bull DatagramSocket() constructor sin argumentos que permite que el sistema elija un puerto entre los que esteacuten libres y selecciona una de las direcciones locales

bull DatagramSocket(int port) constructor que toma un nuacutemero de puerto como argumento apropiado para los procesos que necesitan un nuacutemero de puerto (servicios)

bull DatagramSocket(int port InetAddress laddr) constructor que toma como argumentos el nuacutemero de puerto y una determinada direccioacuten local

DatagramSocket maneja sockets para enviar y recibir datagramas UDP Proporciona tres constructores

MEacuteTODOS DE LA CLASE DATAGRAMSOCKET

bull SEND(DATAGRAMPACKET P) Y RECEIVE(DATAGRAMPACKET P) ESTOS MEacuteTODOS SIRVEN PARA TRANSMITIR DATAGRAMAS ENTRE UN PAR DE CONECTORES EL ARGUMENTO DE SEND ES UNA INSTANCIA DE DATAGRAMPACKET CONTENIENDO EL MENSAJE Y EL DESTINO EL ARGUMENTO DE RECEIVE ES UN DATAGRAMPACKET VACIacuteO EN EL QUE COLOCAR EL MENSAJE SU LONGITUD Y SU ORIGEN

bull SETSOTIMEOUT(INT TIMEOUT) ESTE MEacuteTODO PERMITE ESTABLECER UN TIEMPO DE ESPERA LIacuteMITE CUANDO SE FIJA UN LIacuteMITE EL MEacuteTODO RECEIVE SE BLOQUEA DURANTE EL TIEMPO FIJADO Y DESPUEacuteS LANZA UNA EXCEPCIOacuteN INTERRUPTEDIOEXCEPTION

bull CONNECT(INETADDRESS ADDRESS INT PORT) ESTE MEacuteTODO SE UTILIZA PARA CONECTARSE A UN PUERTO REMOTO Y A UNA DIRECCIOacuteN INTERNET CONCRETOS EN CUYO CASO EL CONECTOR SOacuteLO PODRAacute ENVIAR Y RECIBIR MENSAJES DE ESA DIRECCIOacuteN 15

ENVIAR Y RECIBIR LOS DATAGRAMPACKET

PARA ENVIAR EL DATAGRAMPACKET DEBEMOS LLAMAR AL MEacuteTODO SEND() DE DATAGRAMSOCKET PASANDO COMO PARAacuteMETRO EL DATAGRAMPACKET QUE ACABAMOS DE CREAR

ENVIAR DATAGRAMPACKET

SOCKETSEND(DATO)

bullPARA RECIBIR IGUAL PERO CON SOCKETRECEIVE()

RECIBIR DATAGRAMPACKET

SOCKETRECEIVE(DATO)

16

MEacuteTODOSbull CLOSE() - CIERRA UN SOCKET Y SE DESLIGA DEL PUERTO LOCAL

bull CONNECT (INETADDRESS REMOTE_ADDR REMOTE_PORT INT) ndash RESTRINGE EL ACCESO A LA DIRECCIOacuteN ESPECIFICADA A DISTANCIA Y EL PUERTO

bull DISCONNECT() - DESCONECTA EL DATAGRAMSOCKET

bull INETADDRESS GETINETADDRESS () - DEVUELVE LA DIRECCIOacuteN REMOTA A LA QUE EL SOCKET ESTAacute CONECTADO O NULL SI NO EXISTE NINGUNA TAL CONEXIOacuteN

bull INT GETPORT () - DEVUELVE EL PUERTO REMOTO AL QUE ESTAacute CONECTADO EL SOCKET O -1 SI NO EXISTE DICHA CONEXIOacuteN

bull INETADDRESS GETLOCALADDRESS () - DEVUELVE LA DIRECCIOacuteN LOCAL A LA QUE EL SOCKET ESTA ENLAZADO

bull INT GETLOCALPORT () - DEVUELVE EL PUERTO LOCAL AL QUE ESTAacute ENLAZADO EL CONECTOR

bull INT GETRECEIVEBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION ndash DEVUELVE EL TAMANtildeO MAacuteXIMO DEL BUacuteFER UTILIZADO PARA LOS PAQUETES UDP ENTRANTES

bull INT GETSENDBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL TAMANtildeO MAacuteXIMO DE BUacuteFER UTILIZADO PARA PAQUETES UDP SALIENTES

bull GETSOTIMEOUT INT () THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL VALOR DE LA OPCIOacuteN DE CONECTOR DE TIEMPO DE ESPERA ESTE VALOR SE UTILIZA PARA DETERMINAR EL NUacuteMERO DE MILISEGUNDOS QUE UNA OPERACIOacuteN DE LECTURA BLOQUEARA ANTES DE LANZAR UN JAVAIOINTERRUPTEDIOEXCEPTION DE MANERA PREDETERMINADA ESTE VALOR SERAacute IGUAL A CERO LO QUE INDICA QUE EL BLOQUEO DE E S SE UTILIZARAacute

bull RECEIVE (DATAGRAMPACKET PACKET)) THROWS JAVAIOIOEXCEPTION- LEE UN PAQUETE UDP Y ALMACENA EL CONTENIDO EN EL PAQUETE ESPECIFICADO LA DIRECCIOacuteN Y EL PUERTO

17

CLASE DATAGRAMPACKET

bull UN DATAGRAMPACKET SE UTILIZA PARA REPRESENTAR UN PAQUETE UDP Y DEBE SER CREADO ANTES DE RECIBIR LOS PAQUETES

bull PROPORCIONAN CONSTRUCTORES PARA CREAR INSTANCIAS A PARTIR DE LOS DATAGRAMAS RECIBIDOS Y PARA CREAR INSTANCIAS DE DATAGRAMAS QUE VAN A SER ENVIADOS

18

19

Estos constructores crean una instancia de datagrama compuesta por una cadena de bytes que almacena el mensaje la longitud del mensaje y la direccioacuten de Internet y el nuacutemero de puerto local del conector destino tal y como sigue

1Constructores para datagramas que van a ser enviados

DatagramPacket(byte[] buf int length)

DatagramPacket(byte[] buf int length InetAddress address int port)

DatagramPacket

20

2Constructores para datagramas recibido

DatagramPacket(byte[] buf int offset int length)

DatagramPacket(byte[] buf int offset int length InetAddress address int port) Estos constructores nos permiten crear instancias de los datagramas recibidos especificando la cadena de bytes en la que alojar el mensaje la longitud de la misma y el offset dentro de la cadena

Dentro de esta clase hay meacutetodos para obtener los diferentes componentes de un datagrama tanto recibido como enviado

1getData() para obtener el mensaje contenido en el datagrama2getAddress() para obtener la direccioacuten IP3getPort() para obtener el puerto

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 13: Sockets en JAVA

CLASE DATAGRAMSOCKET

bull LA CLASE DATAGRAMSOCKET PROPORCIONA ACCESO A UN SOCKET UDP LO QUE PERMITE QUE LOS PAQUETES UDP PUEDAN SER ENVIADOS Y RECIBIDOS

bull EL MISMO DATAGRAMSOCKET PUEDE SER USADO PARA RECIBIR LOS PAQUETES TANTO COMO PARA ENVIARLOS

13

14

bull DatagramSocket() constructor sin argumentos que permite que el sistema elija un puerto entre los que esteacuten libres y selecciona una de las direcciones locales

bull DatagramSocket(int port) constructor que toma un nuacutemero de puerto como argumento apropiado para los procesos que necesitan un nuacutemero de puerto (servicios)

bull DatagramSocket(int port InetAddress laddr) constructor que toma como argumentos el nuacutemero de puerto y una determinada direccioacuten local

DatagramSocket maneja sockets para enviar y recibir datagramas UDP Proporciona tres constructores

MEacuteTODOS DE LA CLASE DATAGRAMSOCKET

bull SEND(DATAGRAMPACKET P) Y RECEIVE(DATAGRAMPACKET P) ESTOS MEacuteTODOS SIRVEN PARA TRANSMITIR DATAGRAMAS ENTRE UN PAR DE CONECTORES EL ARGUMENTO DE SEND ES UNA INSTANCIA DE DATAGRAMPACKET CONTENIENDO EL MENSAJE Y EL DESTINO EL ARGUMENTO DE RECEIVE ES UN DATAGRAMPACKET VACIacuteO EN EL QUE COLOCAR EL MENSAJE SU LONGITUD Y SU ORIGEN

bull SETSOTIMEOUT(INT TIMEOUT) ESTE MEacuteTODO PERMITE ESTABLECER UN TIEMPO DE ESPERA LIacuteMITE CUANDO SE FIJA UN LIacuteMITE EL MEacuteTODO RECEIVE SE BLOQUEA DURANTE EL TIEMPO FIJADO Y DESPUEacuteS LANZA UNA EXCEPCIOacuteN INTERRUPTEDIOEXCEPTION

bull CONNECT(INETADDRESS ADDRESS INT PORT) ESTE MEacuteTODO SE UTILIZA PARA CONECTARSE A UN PUERTO REMOTO Y A UNA DIRECCIOacuteN INTERNET CONCRETOS EN CUYO CASO EL CONECTOR SOacuteLO PODRAacute ENVIAR Y RECIBIR MENSAJES DE ESA DIRECCIOacuteN 15

ENVIAR Y RECIBIR LOS DATAGRAMPACKET

PARA ENVIAR EL DATAGRAMPACKET DEBEMOS LLAMAR AL MEacuteTODO SEND() DE DATAGRAMSOCKET PASANDO COMO PARAacuteMETRO EL DATAGRAMPACKET QUE ACABAMOS DE CREAR

ENVIAR DATAGRAMPACKET

SOCKETSEND(DATO)

bullPARA RECIBIR IGUAL PERO CON SOCKETRECEIVE()

RECIBIR DATAGRAMPACKET

SOCKETRECEIVE(DATO)

16

MEacuteTODOSbull CLOSE() - CIERRA UN SOCKET Y SE DESLIGA DEL PUERTO LOCAL

bull CONNECT (INETADDRESS REMOTE_ADDR REMOTE_PORT INT) ndash RESTRINGE EL ACCESO A LA DIRECCIOacuteN ESPECIFICADA A DISTANCIA Y EL PUERTO

bull DISCONNECT() - DESCONECTA EL DATAGRAMSOCKET

bull INETADDRESS GETINETADDRESS () - DEVUELVE LA DIRECCIOacuteN REMOTA A LA QUE EL SOCKET ESTAacute CONECTADO O NULL SI NO EXISTE NINGUNA TAL CONEXIOacuteN

bull INT GETPORT () - DEVUELVE EL PUERTO REMOTO AL QUE ESTAacute CONECTADO EL SOCKET O -1 SI NO EXISTE DICHA CONEXIOacuteN

bull INETADDRESS GETLOCALADDRESS () - DEVUELVE LA DIRECCIOacuteN LOCAL A LA QUE EL SOCKET ESTA ENLAZADO

bull INT GETLOCALPORT () - DEVUELVE EL PUERTO LOCAL AL QUE ESTAacute ENLAZADO EL CONECTOR

bull INT GETRECEIVEBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION ndash DEVUELVE EL TAMANtildeO MAacuteXIMO DEL BUacuteFER UTILIZADO PARA LOS PAQUETES UDP ENTRANTES

bull INT GETSENDBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL TAMANtildeO MAacuteXIMO DE BUacuteFER UTILIZADO PARA PAQUETES UDP SALIENTES

bull GETSOTIMEOUT INT () THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL VALOR DE LA OPCIOacuteN DE CONECTOR DE TIEMPO DE ESPERA ESTE VALOR SE UTILIZA PARA DETERMINAR EL NUacuteMERO DE MILISEGUNDOS QUE UNA OPERACIOacuteN DE LECTURA BLOQUEARA ANTES DE LANZAR UN JAVAIOINTERRUPTEDIOEXCEPTION DE MANERA PREDETERMINADA ESTE VALOR SERAacute IGUAL A CERO LO QUE INDICA QUE EL BLOQUEO DE E S SE UTILIZARAacute

bull RECEIVE (DATAGRAMPACKET PACKET)) THROWS JAVAIOIOEXCEPTION- LEE UN PAQUETE UDP Y ALMACENA EL CONTENIDO EN EL PAQUETE ESPECIFICADO LA DIRECCIOacuteN Y EL PUERTO

17

CLASE DATAGRAMPACKET

bull UN DATAGRAMPACKET SE UTILIZA PARA REPRESENTAR UN PAQUETE UDP Y DEBE SER CREADO ANTES DE RECIBIR LOS PAQUETES

bull PROPORCIONAN CONSTRUCTORES PARA CREAR INSTANCIAS A PARTIR DE LOS DATAGRAMAS RECIBIDOS Y PARA CREAR INSTANCIAS DE DATAGRAMAS QUE VAN A SER ENVIADOS

18

19

Estos constructores crean una instancia de datagrama compuesta por una cadena de bytes que almacena el mensaje la longitud del mensaje y la direccioacuten de Internet y el nuacutemero de puerto local del conector destino tal y como sigue

1Constructores para datagramas que van a ser enviados

DatagramPacket(byte[] buf int length)

DatagramPacket(byte[] buf int length InetAddress address int port)

DatagramPacket

20

2Constructores para datagramas recibido

DatagramPacket(byte[] buf int offset int length)

DatagramPacket(byte[] buf int offset int length InetAddress address int port) Estos constructores nos permiten crear instancias de los datagramas recibidos especificando la cadena de bytes en la que alojar el mensaje la longitud de la misma y el offset dentro de la cadena

Dentro de esta clase hay meacutetodos para obtener los diferentes componentes de un datagrama tanto recibido como enviado

1getData() para obtener el mensaje contenido en el datagrama2getAddress() para obtener la direccioacuten IP3getPort() para obtener el puerto

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 14: Sockets en JAVA

14

bull DatagramSocket() constructor sin argumentos que permite que el sistema elija un puerto entre los que esteacuten libres y selecciona una de las direcciones locales

bull DatagramSocket(int port) constructor que toma un nuacutemero de puerto como argumento apropiado para los procesos que necesitan un nuacutemero de puerto (servicios)

bull DatagramSocket(int port InetAddress laddr) constructor que toma como argumentos el nuacutemero de puerto y una determinada direccioacuten local

DatagramSocket maneja sockets para enviar y recibir datagramas UDP Proporciona tres constructores

MEacuteTODOS DE LA CLASE DATAGRAMSOCKET

bull SEND(DATAGRAMPACKET P) Y RECEIVE(DATAGRAMPACKET P) ESTOS MEacuteTODOS SIRVEN PARA TRANSMITIR DATAGRAMAS ENTRE UN PAR DE CONECTORES EL ARGUMENTO DE SEND ES UNA INSTANCIA DE DATAGRAMPACKET CONTENIENDO EL MENSAJE Y EL DESTINO EL ARGUMENTO DE RECEIVE ES UN DATAGRAMPACKET VACIacuteO EN EL QUE COLOCAR EL MENSAJE SU LONGITUD Y SU ORIGEN

bull SETSOTIMEOUT(INT TIMEOUT) ESTE MEacuteTODO PERMITE ESTABLECER UN TIEMPO DE ESPERA LIacuteMITE CUANDO SE FIJA UN LIacuteMITE EL MEacuteTODO RECEIVE SE BLOQUEA DURANTE EL TIEMPO FIJADO Y DESPUEacuteS LANZA UNA EXCEPCIOacuteN INTERRUPTEDIOEXCEPTION

bull CONNECT(INETADDRESS ADDRESS INT PORT) ESTE MEacuteTODO SE UTILIZA PARA CONECTARSE A UN PUERTO REMOTO Y A UNA DIRECCIOacuteN INTERNET CONCRETOS EN CUYO CASO EL CONECTOR SOacuteLO PODRAacute ENVIAR Y RECIBIR MENSAJES DE ESA DIRECCIOacuteN 15

ENVIAR Y RECIBIR LOS DATAGRAMPACKET

PARA ENVIAR EL DATAGRAMPACKET DEBEMOS LLAMAR AL MEacuteTODO SEND() DE DATAGRAMSOCKET PASANDO COMO PARAacuteMETRO EL DATAGRAMPACKET QUE ACABAMOS DE CREAR

ENVIAR DATAGRAMPACKET

SOCKETSEND(DATO)

bullPARA RECIBIR IGUAL PERO CON SOCKETRECEIVE()

RECIBIR DATAGRAMPACKET

SOCKETRECEIVE(DATO)

16

MEacuteTODOSbull CLOSE() - CIERRA UN SOCKET Y SE DESLIGA DEL PUERTO LOCAL

bull CONNECT (INETADDRESS REMOTE_ADDR REMOTE_PORT INT) ndash RESTRINGE EL ACCESO A LA DIRECCIOacuteN ESPECIFICADA A DISTANCIA Y EL PUERTO

bull DISCONNECT() - DESCONECTA EL DATAGRAMSOCKET

bull INETADDRESS GETINETADDRESS () - DEVUELVE LA DIRECCIOacuteN REMOTA A LA QUE EL SOCKET ESTAacute CONECTADO O NULL SI NO EXISTE NINGUNA TAL CONEXIOacuteN

bull INT GETPORT () - DEVUELVE EL PUERTO REMOTO AL QUE ESTAacute CONECTADO EL SOCKET O -1 SI NO EXISTE DICHA CONEXIOacuteN

bull INETADDRESS GETLOCALADDRESS () - DEVUELVE LA DIRECCIOacuteN LOCAL A LA QUE EL SOCKET ESTA ENLAZADO

bull INT GETLOCALPORT () - DEVUELVE EL PUERTO LOCAL AL QUE ESTAacute ENLAZADO EL CONECTOR

bull INT GETRECEIVEBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION ndash DEVUELVE EL TAMANtildeO MAacuteXIMO DEL BUacuteFER UTILIZADO PARA LOS PAQUETES UDP ENTRANTES

bull INT GETSENDBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL TAMANtildeO MAacuteXIMO DE BUacuteFER UTILIZADO PARA PAQUETES UDP SALIENTES

bull GETSOTIMEOUT INT () THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL VALOR DE LA OPCIOacuteN DE CONECTOR DE TIEMPO DE ESPERA ESTE VALOR SE UTILIZA PARA DETERMINAR EL NUacuteMERO DE MILISEGUNDOS QUE UNA OPERACIOacuteN DE LECTURA BLOQUEARA ANTES DE LANZAR UN JAVAIOINTERRUPTEDIOEXCEPTION DE MANERA PREDETERMINADA ESTE VALOR SERAacute IGUAL A CERO LO QUE INDICA QUE EL BLOQUEO DE E S SE UTILIZARAacute

bull RECEIVE (DATAGRAMPACKET PACKET)) THROWS JAVAIOIOEXCEPTION- LEE UN PAQUETE UDP Y ALMACENA EL CONTENIDO EN EL PAQUETE ESPECIFICADO LA DIRECCIOacuteN Y EL PUERTO

17

CLASE DATAGRAMPACKET

bull UN DATAGRAMPACKET SE UTILIZA PARA REPRESENTAR UN PAQUETE UDP Y DEBE SER CREADO ANTES DE RECIBIR LOS PAQUETES

bull PROPORCIONAN CONSTRUCTORES PARA CREAR INSTANCIAS A PARTIR DE LOS DATAGRAMAS RECIBIDOS Y PARA CREAR INSTANCIAS DE DATAGRAMAS QUE VAN A SER ENVIADOS

18

19

Estos constructores crean una instancia de datagrama compuesta por una cadena de bytes que almacena el mensaje la longitud del mensaje y la direccioacuten de Internet y el nuacutemero de puerto local del conector destino tal y como sigue

1Constructores para datagramas que van a ser enviados

DatagramPacket(byte[] buf int length)

DatagramPacket(byte[] buf int length InetAddress address int port)

DatagramPacket

20

2Constructores para datagramas recibido

DatagramPacket(byte[] buf int offset int length)

DatagramPacket(byte[] buf int offset int length InetAddress address int port) Estos constructores nos permiten crear instancias de los datagramas recibidos especificando la cadena de bytes en la que alojar el mensaje la longitud de la misma y el offset dentro de la cadena

Dentro de esta clase hay meacutetodos para obtener los diferentes componentes de un datagrama tanto recibido como enviado

1getData() para obtener el mensaje contenido en el datagrama2getAddress() para obtener la direccioacuten IP3getPort() para obtener el puerto

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 15: Sockets en JAVA

MEacuteTODOS DE LA CLASE DATAGRAMSOCKET

bull SEND(DATAGRAMPACKET P) Y RECEIVE(DATAGRAMPACKET P) ESTOS MEacuteTODOS SIRVEN PARA TRANSMITIR DATAGRAMAS ENTRE UN PAR DE CONECTORES EL ARGUMENTO DE SEND ES UNA INSTANCIA DE DATAGRAMPACKET CONTENIENDO EL MENSAJE Y EL DESTINO EL ARGUMENTO DE RECEIVE ES UN DATAGRAMPACKET VACIacuteO EN EL QUE COLOCAR EL MENSAJE SU LONGITUD Y SU ORIGEN

bull SETSOTIMEOUT(INT TIMEOUT) ESTE MEacuteTODO PERMITE ESTABLECER UN TIEMPO DE ESPERA LIacuteMITE CUANDO SE FIJA UN LIacuteMITE EL MEacuteTODO RECEIVE SE BLOQUEA DURANTE EL TIEMPO FIJADO Y DESPUEacuteS LANZA UNA EXCEPCIOacuteN INTERRUPTEDIOEXCEPTION

bull CONNECT(INETADDRESS ADDRESS INT PORT) ESTE MEacuteTODO SE UTILIZA PARA CONECTARSE A UN PUERTO REMOTO Y A UNA DIRECCIOacuteN INTERNET CONCRETOS EN CUYO CASO EL CONECTOR SOacuteLO PODRAacute ENVIAR Y RECIBIR MENSAJES DE ESA DIRECCIOacuteN 15

ENVIAR Y RECIBIR LOS DATAGRAMPACKET

PARA ENVIAR EL DATAGRAMPACKET DEBEMOS LLAMAR AL MEacuteTODO SEND() DE DATAGRAMSOCKET PASANDO COMO PARAacuteMETRO EL DATAGRAMPACKET QUE ACABAMOS DE CREAR

ENVIAR DATAGRAMPACKET

SOCKETSEND(DATO)

bullPARA RECIBIR IGUAL PERO CON SOCKETRECEIVE()

RECIBIR DATAGRAMPACKET

SOCKETRECEIVE(DATO)

16

MEacuteTODOSbull CLOSE() - CIERRA UN SOCKET Y SE DESLIGA DEL PUERTO LOCAL

bull CONNECT (INETADDRESS REMOTE_ADDR REMOTE_PORT INT) ndash RESTRINGE EL ACCESO A LA DIRECCIOacuteN ESPECIFICADA A DISTANCIA Y EL PUERTO

bull DISCONNECT() - DESCONECTA EL DATAGRAMSOCKET

bull INETADDRESS GETINETADDRESS () - DEVUELVE LA DIRECCIOacuteN REMOTA A LA QUE EL SOCKET ESTAacute CONECTADO O NULL SI NO EXISTE NINGUNA TAL CONEXIOacuteN

bull INT GETPORT () - DEVUELVE EL PUERTO REMOTO AL QUE ESTAacute CONECTADO EL SOCKET O -1 SI NO EXISTE DICHA CONEXIOacuteN

bull INETADDRESS GETLOCALADDRESS () - DEVUELVE LA DIRECCIOacuteN LOCAL A LA QUE EL SOCKET ESTA ENLAZADO

bull INT GETLOCALPORT () - DEVUELVE EL PUERTO LOCAL AL QUE ESTAacute ENLAZADO EL CONECTOR

bull INT GETRECEIVEBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION ndash DEVUELVE EL TAMANtildeO MAacuteXIMO DEL BUacuteFER UTILIZADO PARA LOS PAQUETES UDP ENTRANTES

bull INT GETSENDBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL TAMANtildeO MAacuteXIMO DE BUacuteFER UTILIZADO PARA PAQUETES UDP SALIENTES

bull GETSOTIMEOUT INT () THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL VALOR DE LA OPCIOacuteN DE CONECTOR DE TIEMPO DE ESPERA ESTE VALOR SE UTILIZA PARA DETERMINAR EL NUacuteMERO DE MILISEGUNDOS QUE UNA OPERACIOacuteN DE LECTURA BLOQUEARA ANTES DE LANZAR UN JAVAIOINTERRUPTEDIOEXCEPTION DE MANERA PREDETERMINADA ESTE VALOR SERAacute IGUAL A CERO LO QUE INDICA QUE EL BLOQUEO DE E S SE UTILIZARAacute

bull RECEIVE (DATAGRAMPACKET PACKET)) THROWS JAVAIOIOEXCEPTION- LEE UN PAQUETE UDP Y ALMACENA EL CONTENIDO EN EL PAQUETE ESPECIFICADO LA DIRECCIOacuteN Y EL PUERTO

17

CLASE DATAGRAMPACKET

bull UN DATAGRAMPACKET SE UTILIZA PARA REPRESENTAR UN PAQUETE UDP Y DEBE SER CREADO ANTES DE RECIBIR LOS PAQUETES

bull PROPORCIONAN CONSTRUCTORES PARA CREAR INSTANCIAS A PARTIR DE LOS DATAGRAMAS RECIBIDOS Y PARA CREAR INSTANCIAS DE DATAGRAMAS QUE VAN A SER ENVIADOS

18

19

Estos constructores crean una instancia de datagrama compuesta por una cadena de bytes que almacena el mensaje la longitud del mensaje y la direccioacuten de Internet y el nuacutemero de puerto local del conector destino tal y como sigue

1Constructores para datagramas que van a ser enviados

DatagramPacket(byte[] buf int length)

DatagramPacket(byte[] buf int length InetAddress address int port)

DatagramPacket

20

2Constructores para datagramas recibido

DatagramPacket(byte[] buf int offset int length)

DatagramPacket(byte[] buf int offset int length InetAddress address int port) Estos constructores nos permiten crear instancias de los datagramas recibidos especificando la cadena de bytes en la que alojar el mensaje la longitud de la misma y el offset dentro de la cadena

Dentro de esta clase hay meacutetodos para obtener los diferentes componentes de un datagrama tanto recibido como enviado

1getData() para obtener el mensaje contenido en el datagrama2getAddress() para obtener la direccioacuten IP3getPort() para obtener el puerto

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 16: Sockets en JAVA

ENVIAR Y RECIBIR LOS DATAGRAMPACKET

PARA ENVIAR EL DATAGRAMPACKET DEBEMOS LLAMAR AL MEacuteTODO SEND() DE DATAGRAMSOCKET PASANDO COMO PARAacuteMETRO EL DATAGRAMPACKET QUE ACABAMOS DE CREAR

ENVIAR DATAGRAMPACKET

SOCKETSEND(DATO)

bullPARA RECIBIR IGUAL PERO CON SOCKETRECEIVE()

RECIBIR DATAGRAMPACKET

SOCKETRECEIVE(DATO)

16

MEacuteTODOSbull CLOSE() - CIERRA UN SOCKET Y SE DESLIGA DEL PUERTO LOCAL

bull CONNECT (INETADDRESS REMOTE_ADDR REMOTE_PORT INT) ndash RESTRINGE EL ACCESO A LA DIRECCIOacuteN ESPECIFICADA A DISTANCIA Y EL PUERTO

bull DISCONNECT() - DESCONECTA EL DATAGRAMSOCKET

bull INETADDRESS GETINETADDRESS () - DEVUELVE LA DIRECCIOacuteN REMOTA A LA QUE EL SOCKET ESTAacute CONECTADO O NULL SI NO EXISTE NINGUNA TAL CONEXIOacuteN

bull INT GETPORT () - DEVUELVE EL PUERTO REMOTO AL QUE ESTAacute CONECTADO EL SOCKET O -1 SI NO EXISTE DICHA CONEXIOacuteN

bull INETADDRESS GETLOCALADDRESS () - DEVUELVE LA DIRECCIOacuteN LOCAL A LA QUE EL SOCKET ESTA ENLAZADO

bull INT GETLOCALPORT () - DEVUELVE EL PUERTO LOCAL AL QUE ESTAacute ENLAZADO EL CONECTOR

bull INT GETRECEIVEBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION ndash DEVUELVE EL TAMANtildeO MAacuteXIMO DEL BUacuteFER UTILIZADO PARA LOS PAQUETES UDP ENTRANTES

bull INT GETSENDBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL TAMANtildeO MAacuteXIMO DE BUacuteFER UTILIZADO PARA PAQUETES UDP SALIENTES

bull GETSOTIMEOUT INT () THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL VALOR DE LA OPCIOacuteN DE CONECTOR DE TIEMPO DE ESPERA ESTE VALOR SE UTILIZA PARA DETERMINAR EL NUacuteMERO DE MILISEGUNDOS QUE UNA OPERACIOacuteN DE LECTURA BLOQUEARA ANTES DE LANZAR UN JAVAIOINTERRUPTEDIOEXCEPTION DE MANERA PREDETERMINADA ESTE VALOR SERAacute IGUAL A CERO LO QUE INDICA QUE EL BLOQUEO DE E S SE UTILIZARAacute

bull RECEIVE (DATAGRAMPACKET PACKET)) THROWS JAVAIOIOEXCEPTION- LEE UN PAQUETE UDP Y ALMACENA EL CONTENIDO EN EL PAQUETE ESPECIFICADO LA DIRECCIOacuteN Y EL PUERTO

17

CLASE DATAGRAMPACKET

bull UN DATAGRAMPACKET SE UTILIZA PARA REPRESENTAR UN PAQUETE UDP Y DEBE SER CREADO ANTES DE RECIBIR LOS PAQUETES

bull PROPORCIONAN CONSTRUCTORES PARA CREAR INSTANCIAS A PARTIR DE LOS DATAGRAMAS RECIBIDOS Y PARA CREAR INSTANCIAS DE DATAGRAMAS QUE VAN A SER ENVIADOS

18

19

Estos constructores crean una instancia de datagrama compuesta por una cadena de bytes que almacena el mensaje la longitud del mensaje y la direccioacuten de Internet y el nuacutemero de puerto local del conector destino tal y como sigue

1Constructores para datagramas que van a ser enviados

DatagramPacket(byte[] buf int length)

DatagramPacket(byte[] buf int length InetAddress address int port)

DatagramPacket

20

2Constructores para datagramas recibido

DatagramPacket(byte[] buf int offset int length)

DatagramPacket(byte[] buf int offset int length InetAddress address int port) Estos constructores nos permiten crear instancias de los datagramas recibidos especificando la cadena de bytes en la que alojar el mensaje la longitud de la misma y el offset dentro de la cadena

Dentro de esta clase hay meacutetodos para obtener los diferentes componentes de un datagrama tanto recibido como enviado

1getData() para obtener el mensaje contenido en el datagrama2getAddress() para obtener la direccioacuten IP3getPort() para obtener el puerto

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 17: Sockets en JAVA

MEacuteTODOSbull CLOSE() - CIERRA UN SOCKET Y SE DESLIGA DEL PUERTO LOCAL

bull CONNECT (INETADDRESS REMOTE_ADDR REMOTE_PORT INT) ndash RESTRINGE EL ACCESO A LA DIRECCIOacuteN ESPECIFICADA A DISTANCIA Y EL PUERTO

bull DISCONNECT() - DESCONECTA EL DATAGRAMSOCKET

bull INETADDRESS GETINETADDRESS () - DEVUELVE LA DIRECCIOacuteN REMOTA A LA QUE EL SOCKET ESTAacute CONECTADO O NULL SI NO EXISTE NINGUNA TAL CONEXIOacuteN

bull INT GETPORT () - DEVUELVE EL PUERTO REMOTO AL QUE ESTAacute CONECTADO EL SOCKET O -1 SI NO EXISTE DICHA CONEXIOacuteN

bull INETADDRESS GETLOCALADDRESS () - DEVUELVE LA DIRECCIOacuteN LOCAL A LA QUE EL SOCKET ESTA ENLAZADO

bull INT GETLOCALPORT () - DEVUELVE EL PUERTO LOCAL AL QUE ESTAacute ENLAZADO EL CONECTOR

bull INT GETRECEIVEBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION ndash DEVUELVE EL TAMANtildeO MAacuteXIMO DEL BUacuteFER UTILIZADO PARA LOS PAQUETES UDP ENTRANTES

bull INT GETSENDBUFFERSIZE() THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL TAMANtildeO MAacuteXIMO DE BUacuteFER UTILIZADO PARA PAQUETES UDP SALIENTES

bull GETSOTIMEOUT INT () THROWS JAVANETSOCKETEXCEPTION - DEVUELVE EL VALOR DE LA OPCIOacuteN DE CONECTOR DE TIEMPO DE ESPERA ESTE VALOR SE UTILIZA PARA DETERMINAR EL NUacuteMERO DE MILISEGUNDOS QUE UNA OPERACIOacuteN DE LECTURA BLOQUEARA ANTES DE LANZAR UN JAVAIOINTERRUPTEDIOEXCEPTION DE MANERA PREDETERMINADA ESTE VALOR SERAacute IGUAL A CERO LO QUE INDICA QUE EL BLOQUEO DE E S SE UTILIZARAacute

bull RECEIVE (DATAGRAMPACKET PACKET)) THROWS JAVAIOIOEXCEPTION- LEE UN PAQUETE UDP Y ALMACENA EL CONTENIDO EN EL PAQUETE ESPECIFICADO LA DIRECCIOacuteN Y EL PUERTO

17

CLASE DATAGRAMPACKET

bull UN DATAGRAMPACKET SE UTILIZA PARA REPRESENTAR UN PAQUETE UDP Y DEBE SER CREADO ANTES DE RECIBIR LOS PAQUETES

bull PROPORCIONAN CONSTRUCTORES PARA CREAR INSTANCIAS A PARTIR DE LOS DATAGRAMAS RECIBIDOS Y PARA CREAR INSTANCIAS DE DATAGRAMAS QUE VAN A SER ENVIADOS

18

19

Estos constructores crean una instancia de datagrama compuesta por una cadena de bytes que almacena el mensaje la longitud del mensaje y la direccioacuten de Internet y el nuacutemero de puerto local del conector destino tal y como sigue

1Constructores para datagramas que van a ser enviados

DatagramPacket(byte[] buf int length)

DatagramPacket(byte[] buf int length InetAddress address int port)

DatagramPacket

20

2Constructores para datagramas recibido

DatagramPacket(byte[] buf int offset int length)

DatagramPacket(byte[] buf int offset int length InetAddress address int port) Estos constructores nos permiten crear instancias de los datagramas recibidos especificando la cadena de bytes en la que alojar el mensaje la longitud de la misma y el offset dentro de la cadena

Dentro de esta clase hay meacutetodos para obtener los diferentes componentes de un datagrama tanto recibido como enviado

1getData() para obtener el mensaje contenido en el datagrama2getAddress() para obtener la direccioacuten IP3getPort() para obtener el puerto

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 18: Sockets en JAVA

CLASE DATAGRAMPACKET

bull UN DATAGRAMPACKET SE UTILIZA PARA REPRESENTAR UN PAQUETE UDP Y DEBE SER CREADO ANTES DE RECIBIR LOS PAQUETES

bull PROPORCIONAN CONSTRUCTORES PARA CREAR INSTANCIAS A PARTIR DE LOS DATAGRAMAS RECIBIDOS Y PARA CREAR INSTANCIAS DE DATAGRAMAS QUE VAN A SER ENVIADOS

18

19

Estos constructores crean una instancia de datagrama compuesta por una cadena de bytes que almacena el mensaje la longitud del mensaje y la direccioacuten de Internet y el nuacutemero de puerto local del conector destino tal y como sigue

1Constructores para datagramas que van a ser enviados

DatagramPacket(byte[] buf int length)

DatagramPacket(byte[] buf int length InetAddress address int port)

DatagramPacket

20

2Constructores para datagramas recibido

DatagramPacket(byte[] buf int offset int length)

DatagramPacket(byte[] buf int offset int length InetAddress address int port) Estos constructores nos permiten crear instancias de los datagramas recibidos especificando la cadena de bytes en la que alojar el mensaje la longitud de la misma y el offset dentro de la cadena

Dentro de esta clase hay meacutetodos para obtener los diferentes componentes de un datagrama tanto recibido como enviado

1getData() para obtener el mensaje contenido en el datagrama2getAddress() para obtener la direccioacuten IP3getPort() para obtener el puerto

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 19: Sockets en JAVA

19

Estos constructores crean una instancia de datagrama compuesta por una cadena de bytes que almacena el mensaje la longitud del mensaje y la direccioacuten de Internet y el nuacutemero de puerto local del conector destino tal y como sigue

1Constructores para datagramas que van a ser enviados

DatagramPacket(byte[] buf int length)

DatagramPacket(byte[] buf int length InetAddress address int port)

DatagramPacket

20

2Constructores para datagramas recibido

DatagramPacket(byte[] buf int offset int length)

DatagramPacket(byte[] buf int offset int length InetAddress address int port) Estos constructores nos permiten crear instancias de los datagramas recibidos especificando la cadena de bytes en la que alojar el mensaje la longitud de la misma y el offset dentro de la cadena

Dentro de esta clase hay meacutetodos para obtener los diferentes componentes de un datagrama tanto recibido como enviado

1getData() para obtener el mensaje contenido en el datagrama2getAddress() para obtener la direccioacuten IP3getPort() para obtener el puerto

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 20: Sockets en JAVA

20

2Constructores para datagramas recibido

DatagramPacket(byte[] buf int offset int length)

DatagramPacket(byte[] buf int offset int length InetAddress address int port) Estos constructores nos permiten crear instancias de los datagramas recibidos especificando la cadena de bytes en la que alojar el mensaje la longitud de la misma y el offset dentro de la cadena

Dentro de esta clase hay meacutetodos para obtener los diferentes componentes de un datagrama tanto recibido como enviado

1getData() para obtener el mensaje contenido en el datagrama2getAddress() para obtener la direccioacuten IP3getPort() para obtener el puerto

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 21: Sockets en JAVA

EL FLUJO DEL PROGRAMA EN EL EMISOR Y RECEPTOR

1Remitente del programaCrear un socket de datagramas y vincularlo o cualquier puerto local Colocar la data en una matriz de bytesCrear un paquete de datagramas especificando la matriz de datos y la direccioacuten del receptorInvocar el meacutetodo de enviacuteo del socket con una referencia al paquete de datagramas

1Receptor del programaCrear un socket de datagrama y enlazarlo a un puerto local especiacuteficoCrear una matriz de bytes para la recepcioacuten de los datosCrear un paquete de datagramas especificando la matriz de datosInvocar el meacutetodo de recepcioacuten del socket con una referencia a los paquetes de datagramas 21

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 22: Sockets en JAVA

EJEMPLO DE PROTOCOLO DE DATAGRAMAS DE USUARIO

PARA DEMOSTRAR COacuteMO LOS PAQUETES UDP SE ENVIacuteAN Y RECIBEN VAMOS A COMPILAR Y

EJECUTAR DOS PEQUENtildeOS EJEMPLOS EL PRIMERO SE ENLAZARAacute A UN PUERTO

LOCAL LEERAacute UN PAQUETE Y MOSTRARAacute SU CONTENIDO E INFORMACIOacuteN DE

DIRECCIONAMIENTO EL SEGUNDO EJEMPLO ENVIARAacute EL PAQUETE

LEIacuteDO POR EL PRIMERO22

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 23: Sockets en JAVA

TALLER N 1CLASE RECIBE

23

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 24: Sockets en JAVA

TALLER N 1 CLASE ENVIA

24

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 25: Sockets en JAVA

TALLER GRUPO DE 2 ESTUDIANTES

1 ESCRIBA EL COacuteDIGO DE LOS DOS PROGRAMAS2 COMPILE Y EJECUTE EL COacuteDIGO DEL EJEMPLO EN UNA MAacuteQUINA USANDO

``LOCALHOST COMO NOMBRE DE MAacuteQUINA POR EJEMPLO HOST LOCALHOST PUERTO 3000 MENSAJE HOLA MUNDO

3 EJECUTE LOS DOS PROGRAMAS ARRANCANDO PRIMERO AL RECEPTOR Y DESPUEacuteS AL EMISOR EL MENSAJE QUE SE ENVIacuteE NO DEBERIacuteA EXCEDER LA LONGITUD MAacuteXIMA PERMITIDA QUE ES DE 25 CARACTERES DESCRIBA EL RESULTADO DE LA EJECUCIOacuteN

4 VUELVA A EJECUTAR LAS APLICACIONES ESTA VEZ EJECUTANDO PRIMERO AL ENVIA Y LUEGO AL QUE RECIBE DESCRIBA Y EXPLIQUE EL RESULTADO

5 REPITA EL APARTADO ESTA VEZ MANDANDO UN MENSAJE DE LONGITUD MAacuteS GRANDE QUE LA MAacuteXIMA LONGITUD PERMITIDA DESCRIBA Y EXPLIQUE LA SALIDA PRODUCIDA

6 EN MAacuteQUINAS SEPARADAS EJECUTE SOLAMENTE AL QUE RECIBE Y EN OTRA MAacuteQUINA EJECUTE AL QUE ENVIA DESCRIBA Y EXPLIQUE EL RESULTADO

7 MODIFIQUE EL CODIGO DEL QUE RECIBE PARA QUE MUESTRE LA SIGUIENTE INFORMACIOacuteN

25

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
Page 26: Sockets en JAVA

INDICACIONES DE SEGURIDAD

bull PASOS

bull DESACTIVAR LOS FIREWORKS Y ANTIVIRUS

bull EN AMBAS MAQUINAS LA QUE TRABAJARA COMO CLIENTE Y LA OTRA COMO SERVIDOR INCLUIR ESTE COacuteDIGO EN EL JDK ARCHIVO (JAVAPOLICY)

bull CPROGRAM FILESJAVAJDK170_25JRELIBSECURITY

CAMBIAR ESTOS DATOSPERMISSION JAVANETSOCKETPERMISSION 1024-65535 CONNECTACCEPTLISTENRESOLVE

bull

bull ESTOS PERMITEN TENER ACCESO DESDE OTRO EQUIPO SI TIENE LOCALHOST DEJE EL PUERTO QUE TIENEPERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 PERMISSION JAVANETSOCKETPERMISSION LOCALHOST80 CONNECTACCEPTLISTENRESOLVECONNECTACCEPTLISTENRESOLVE

bull RECORDAR MODIFICARLO EN LOS DOS EQUIPOS 26

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26