Title: TEMA 3. Programaci
1TEMA 3.Programación en red
- Introducción
- Dirección IP. Clase InetAddress
- Conexión mediante URL.
- Conexión mediante TCP/IP
- Conexión mediante UDP/IP
- Acceso a Bases de Datos
2Bibliografía
- Bobadilla, J. y otros. Comunicaciones y Bases de
Datos en Java. Capítulo 2. - M.L.Liu. Computación Distribuida. Ed. Pearson.
Capítulos 1,2,3 y 4.
31 . Introducción
Diferentes formas de Computación
- Computación monolítica. Un único ordenador,
pueden acceder al sistema múltiples usuarios. - Computación distribuida. Implica el uso de
múltiples ordenadores conectados a la red. - Computación paralela. Implica el uso de varios
procesadores simultáneos. - Computación cooperativa. En este tipo de
proyectos se divide la computación a gran escala
entre las máquinas de internet. Ej. Búsqueda de
inteligencia extraterrestre.
41 . Introducción
Internet
- Internet es una red de redes, miles de redes
basadas en tecnologías heterogéneas se enlazan en
la Internet ofreciendo un conjunto homogéneo de
servicios. - En Internet se encuentran ordenadores muy
diversos con sistemas operativos diferentes. - Los protocolos de la familia TCP/IP son los que
hacen posible que todos estos sistemas compartan
información entre sí.
51 . Introducción
Internet
- La familia de protocolos TCP/IP abarca los siete
niveles OSI (Open System Interconnect).
61 . Introducción
Internet
- Cobertura internacional
- Protocolo a nivel de transporte es el TCP, UDP y
RTSP (real time streaming protocol). - Gran difusión
- Importancia social
- Facilidad de acceso (telefónica)
-
71 . Introducción
Redes locales
- Las redes locales permiten compartir recursos
como impresoras, modem o disco de almacenamiento
entre los ordenadores conectados a al red
(Ethernet, token Ring, SNA, DECNET). - La tecnología de red local es el primer eslabón
en la cadena de Internet
81 . Introducción
Protocolo Internet (IP)
- El protocolo IP es el elemento que permite
integrar distintas redes entre si (distintas
redes FDDI, RDSI, X.25, lineas dedicadas, token
ring, ethernet, lineas telefónicas,...) - Cada máquina de Internet tiene una dirección IP
única. Una dirección IP es un número de 32 bits
que normalmente se escribe como cuatro enteros
entre 0 y 255 separados por puntos
(192.112.36.5). - La dirección IP permite el encaminamiento de la
información a través de la Internet.
91 . Introducción
Estrategia de Internet
- En la terminología de comunicaciones el protocolo
IP define una red de conmutación de paquetes. - La información se fragmenta en pequeños trozos o
paquetes (alrededor de 1500 caracteres) que se
envían independientemente por la red. - Cada paquete es enviado con la dirección del
ordenador donde ha de ser entregado y, de forma
similar a como funciona un sistema postal, cada
paquete viaja independientemente de los demás por
la red hasta alcanzar su destino.
101 . Introducción
Estrategia de Internet
- Dentro de una red local, el encaminamiento de la
información es simple. En Ethernet por ejemplo
todos los ordenadores 'escuchan' la red para
detectar los paquetes que se le dirigen a ellos. - Los routers (antes llamados gateway) son los
elementos encargados del encaminamiento de los
mensajes IP. Los routers conocen las máquinas
conectadas a la red y toman la decisión de como
encaminar los paquetes de datos a través de unos
enlaces u otros. -
111 . Introducción
Estrategia de Internet
- Cada router sólo necesita saber que conexiones
están disponibles y cual es el mejor "próximo
salto" para conseguir que un paquete este mas
cerca de su destino (El paquete va "saltando" de
router a router hasta llegar a su destino). - Las máquinas de Internet, fuera del entorno de la
red local, utilizan un router para encaminar los
paquetes.
121 . Introducción
Esquema
131 . Introducción
Protocolo de transporte
- Protocolo a nivel de transporte es el TCP y UDP.
- TCP, supone comunicación orientada a conexión.
Ejemplo la llamada telefónica - UDP, supone comunicación sin conexión. Ejemplo
correo postal.
141 . Introducción
WWW
- El servicio de mayor crecimiento en la red es
WWW, en el que se distinguen dos tipos de
ordenadores cliente y servidor. - Http, es el protocolo de transferencia de
hipertexto, permite que navegador (cliente) y
servidor puedan hablar entre si mediante un
alfabeto. - El protocolo es muy sencillo
- Petición Método solicitado, Cabecera de
petición, Datos solicitados - Respuesta Código de estado, Cabecera de
respuesta, Datos de respuesta
151 . Introducción
Programación en red
- La programación en red ha sido siempre
dificultosa, el programador debía conocer muchos
detalles sobre la red y algunas veces sobre el
propio hardware. - La idea es sencilla, se trata de obtener
información desde otra máquina o enviar
información hacia otra máquina, en cierta manera
es parecido a leer y escribir archivos. - En Java es muy fácil realizar programas en red.
La mayoría de los detalles han sido escondidos y
son tratados de forma transparente por parte de
la JVM.
161 . Introducción
Programación en red
- Algunas de las capacidades de Java para construir
programas que trabajen con la red son - Direcciones de Internet (java.net)
- Conexión mediante URLs (java.net)
- Conexión mediante TCP/IP y UDP/IP (java.net)
- Proporcionar servicios vía WWW (servlets y JSP)
- Conexión a bases de datos JDBC (java.sql)
- Acceso a métodos remotos RMI de objetos (java.rmi)
172 . Dirección IP
Direcciones de Internet
- La forma que se identifican las máquinas en la
red es a través de la dirección IP (Internet
Protocol) o bien a través de un nombre de máquina
y usando el mecanismo de resolución de nombres
(DNS) para obtener la dirección IP. - En Java se encuentra la clase InetAddress que
representa una dirección de internet.
182 . Dirección IP
- Representa las direcciones única de cada máquina
en Internet. Se representan a través de un cuatro
números de 8 bits, por ejemplo 123.255.28.120.
Internamente se representa como un número de 32
bits. - Debido a que las direcciones IP son difíciles de
recordar, existe un mecanismo de direcciones
simbólicas que asignan un nombre a cada máquina.
192 . Dirección IP
- Ya que se van a usar ambos tipos de direcciones
para designar a una máquina se hace necesario que
haya un mecanismo para pasar de uno al otro lado
y viceversa. - El DNS (Domain Name System) consiste,
básicamente, en una base de datos distribuida de
forma jerárquica por toda la Internet que es
consultada por el usuario para llevar a cabo la
traducción entre los nombres y las direcciones
numéricas.
202 . Dirección IP
- Esta clase no tiene constructores visibles,
podemos obtener objetos de esta clase de la
siguiente forma - InetAddress dir InetAddress.getLocalHost()
- InetAddress dir InetAddress.getByName(String
g) -
- InetAddress dir InetAddress.
getByAddress(byte addr) - La creación de un objeto InetAddress puede
generar una excepción de tipo UnknownHostException
, si no existe dicha dirección Internet
212 . Dirección IP
- import java.net.
- public class Obtener_IP
- public static void main(String args)throws
Exception - if(args.length ! 1)
- System.err.println("Escribe el nombre de la
máquina") - System.exit(1)
-
- InetAddress a InetAddress.getByName(args0)
- System.out.println(a)
-
223 . Conexión mediante URL
- Un URL es la dirección de un elemento o recurso
en la WWW - protocolo//direcciónpuerto/ruta
- Donde
- Protocolo es el lenguaje mediante el que se
comunican, los más habituales son - ftp - Protocolo de Transferencia de Ficheros
- http - Protocolo de Transferencia de HiperTexto
- mailto - Dirección de Correo Electrónico
- news - Noticias USENET
- Dirección es una dirección de internet
- Puerto es un puerto, normalmente el servicio web
esta en el 80 - Ruta es una ruta en la máquina del servidor
233 . Conexión mediante URL
- La clase URL permite la descarga de los datos a
los que se refiere un URL de Internet y, además,
consigue cierta interacción con ese recurso. - La clase URL está orientada al tratamiento del
protocolo HTTP de la web. - Java permite crear un URL a partir de una cadena
y, luego, poder establecer una URLConnection con
el URL - URL (String)
- URL (URL, nombre_fich_relativo)
- URL (esquema,anfitrión, nombref)
- URL (esquema,anfitrión, p,nombref)
- En caso de utilizar una sintaxis incorrecta se
lanza la excepción MalformedURLException
243 . Conexión mediante URL
- Ejemplo
- URL infonew URL(http//www.dsic.upv.es)
- URL frame new URL(info,frames.html)
- Dado un objeto URL, las partes que lo constituyen
pueden recuperarse con - getProtocol()
- getHost()
- getPort()
- getFile()
253 . Conexión mediante URL
- URL urlobj new URL(...)
- InputStream in urlobj.openStream()
- // lectura del canal haciendo
- // uso de un filtro
- BufferedReader cnew BufferedReader(new
InputStreamReader(in)) - String lineac.readLine()
263 . Conexión mediante URL
- public class ReadUrl
- public static void readOut( String url,
OutputStream out) - try
- URL urlobj new URL(url)
- InputStream in urlobj.openStream()
- int c
- While ((cin.read())gt-1)
- out.write(c)
- in.close()
- catch(MalformedURLExection e)
- catch(IOExection e)
-
273 . Conexión mediante URL
- En general se debe enviar primero información de
consulta antes de recuperar los datos de la URL.
Los pasos son los siguientes - Establecer un objeto URLConnection, a partir de
la URL. - Establecer los parámetros de la conexión deseada
- Conectarse con el URL destino
- Escribir los datos de consulta de la conexión
- Leer la respuesta.
283 . Conexión mediante URL
- El método openConnection crea y devuelve un
objeto URLConnection para lectura y escritura o
ambas. - URLConnection connection urlobj.openConnection()
- Activar la escritura
- connection.setdoOutput(true)
- connection.connect()
- Ahora se puede escribir al URL, utilizando
OutputStream de la conexión o leer con
InputSream. - //escritura
- OutputStream out connection.getOutputStream()
- // lectura
- InputStream in connection.getInputStream()
293 . Conexión mediante URL
- En una conexión de url también se puede leer el
encabezado del mensaje enviado por el servidor
(http). - getContentEncoding
- getContentLength
- getDate
- getLastModifed
- -...
- Al escribir en una conexión URLConnection se
envián datos a un servidor mediante una consulta
Post. Una consulta Post incluye - Un URL que especifica un programa cgi.
- Encabezados Content-Type y Content-Length
- Un cuerpo del mensaje
- Nos debemos preocupar solo del cuerpo del
mensaje.(convención form de html). Clase
URLEncoder y URLDecoder (UTF-8).
303 . Conexión mediante URL
- Ejemplo. El siguiente código se conecta al
recurso - import java.io.
- import java.net.
- public class ReverseTest
- public static void main(String args)
- try
- if (args.length ! 1)
- System.err.println("Usage java
ReverseTest string_to_reverse") - System.exit(1)
-
- String stringToReverse
URLEncoder.encode(args0) - URL url new URL("http//java.sun.com
/cgi-bin/backwards") - URLConnection connection
url.openConnection() - connection.setDoOutput(true)
-
313 . Conexión mediante URL
- PrintWriter writer new
PrintWriter(connection.getOutputStream()) - writer.println("string"
stringToReverse) - writer.close()
- BufferedReader reader new
BufferedReader( - new InputStreamReader(connection.getInputStream
())) - String inputLine
- while ((inputLine
reader.readLine()) ! null) - System.out.println(inputLine)
-
- reader.close()
- catch (MalformedURLException me)
- System.err.println("MalformedURLExcept
ion " me) - catch (IOException ioe)
- System.err.println("IOException "
ioe) -
-
324 . Conexión mediante TCP/IP
- Protocolo de control de la transmisión (TCP)
- En su tránsito por distintas redes y equipos
encaminadores, puede ocurrir que haya paquetes IP
que se pierdan, lleguen duplicados o con errores
en la información que contienen. - El protocolo TCP se encarga de subsanar estas
posibles deficiencias para conseguir un servicio
de transporte de información fiable. TCP
fragmenta la información a transmitir, de la
misma forma que lo hace el protocolo IP. - TCP numera cada uno de estos paquetes de manera
que el receptor de la información pueda
ordenarlos al recibirlos. Para pasar esta
información a través de la red, TCP utiliza un
sobre identificado con el número de secuencia de
cada paquete. - Los paquetes TCP se envían a su destino,
independientemente unos de otros, utilizando el
protocolo IP.
334 . Conexión mediante TCP/IP
- Protocolo de control de la transmisión (TCP)
- En la parte receptora, el TCP recoge el paquete,
extrae los datos, y los pone en el orden
correcto. Si algunos sobres desaparecen, el
receptor le pide al transmisor que retransmita
los paquetes de nuevo. Cuando toda la información
recogida esta en su orden, se pasan los datos a
la capa de aplicaciones. - Esto es una visión ideal del TCP. En la práctica
los paquetes no solamente se pueden perder, sino
que pueden sufrir cambios en su transito por la
red. TCP resuelve este problema colocando en el
paquete que se envía lo que se denomina el
"checksum". - Cuando el paquete llega a su destino, el receptor
TCP calcula que checksum debe ser y lo compara
con el que se ha enviado. Si no son los mismos el
TCP receptor entiende que ha habido un error en
la transmisión y le pide al transmisor que
reenvíe. - De esta forma el TCP ofrece un servicio fiable de
transmisión de información. Todas las
aplicaciones de la Internet utilizan los
servicios de transporte TCP para el intercambio
de información, de forma que pueden ignorar los
problemas de envío de información a través de la
red, o al menos muchos de ellos.
344 . Conexión mediante TCP/IP
- Protocolo de datagramas de usuario (UDP)
- Establecer una conexión TCP requiere gran
cantidad de información en las cabeceras de los
paquetes y en consecuencia retrasos en la
transmisión. - Si se quiere enviar un paquete y no se requiere
una particular precaución en el reparto del mismo
entonces se pude usar otro protocolo que sea mas
simple que el TCP. - En este caso se usa el "protocolo de datagramas
del usuario (UDP) que se utiliza en vez del TCP
en algunas aplicaciones. - UDP es mas simple que el TCP porque no se
preocupa de mensajes que se pierdan, mantener el
orden en los paquetes que se envían, etc... UDP
se usa para programas que sólo envían mensajes
cortos, y pueden reenviar el mensaje si una
respuesta no se produce en período corto de
tiempo. - El UDP también se utiliza en el entorno de la red
local donde la tasa de errores de transmisión es
muy pequeña, y no es necesario el sofisticado
control de errores del protocolo TCP.
354 . Conexión mediante TCP/IP
Sockets (conectores)
- TCP proporciona un canal de comunicación fiable
punto a punto, se usa para aplicaciones
cliente-servidor. - Las clases Socket y ServerSocket del paquete
java.net proporcionan un canal de comunicación
independiente del sistema utilizando TCP. - Un socket es un punto final en un enlace de
comunicación de dos vías entre dos programas que
se ejecutan en la red. Las clases Socket son
utilizadas para representar conexiones entre un
programa cliente y otro programa servidor. - El paquete java.net proporciona dos clases --
Socket y ServerSocket -- que implementan los
lados del cliente y del servidor de una conexión,
respectivamente.
364 . Conexión mediante TCP/IP
Creación de conexiones
- En primer lugar, se crea un socket en el servidor
de manera que los clientes puedan establecer un
flujo con él. - El servidor se queda esperando al cliente (método
accept) - El cliente ya puede crear un socket y establecer
un flujo con el servidor a través de él
utilizando el flujo creado, cliente y servidor
pueden utilizar métodos de lectura y escritura
para recibir y enviar datos - Para crear un socket Java, necesitamos una
dirección Internet válida y un número válido de
puerto - Un servidor es un programa Java que proporciona
un socket en el puerto en cuestión
374 . Conexión mediante TCP/IP
Establecimiento de comunicaciones
Programa cliente
Programa servidor
2.-accept
1.-instanciación
3.-instanciación
ServerSocket
Puerto destino
Socket
4.-Conexión TCP
5.-return del accept
Socket
Puerto
6.-Comunicación
384 . Conexión mediante TCP/IP
Creación de conexiones
- Creación de socket servidor
- ServerSocket oyente new ServerSocket(puerto)
- Espera del servidor
- Socket ss oyente.accept()
- Creación de socket cliente
- Socket sc new Socket
- (InetAddress maquina_servidora, int puerto)
- Flujos para sockets
- DataInputStream nombreFlujoEntrada new
- DataInputStream (sc.getInputStream())
- DataOutputStream nombreFlujoSalida new
- DataOutputStream (ss.getOutputStream())
- Operaciones de lectura/escritura sobre
- nombreFlujoEntrada y nombreFlujoSalida
394 . Conexión mediante TCP/IP
Ejemplo. Cliente hola mundo.
- import java.net.Socket
- import java.io.
- import java.net.UnknownHostException
- public class TCPClienteHolaMundo
- public static void main(String args)
- OutputStream FlujoDeSalida
- InputStream FlujoDeEntrada
- try
- Socket SocketCliente new
Socket("localhost", 8000) -
- FlujoDeSalida SocketCliente.getOutputStr
eam() - OutputStreamWriter CanalS new
OutputStreamWriter(FlujoDeSalida) - PrintWriter CanalSalida new
PrintWriter(CanalS,true) -
-
-
404 . Conexión mediante TCP/IP
Ejemplo. Cliente hola mundo.
- System.out.println("enviando texto")
- CanalSalida.println("Hola Mundo")
- FlujoDeEntrada SocketCliente.getInputStre
am() - InputStreamReader CanalE new
InputStreamReader(FlujoDeEntrada) - BufferedReader CanalEntrada new
BufferedReader(CanalE) -
- String inputLine
- System.out.println("esperando
respuesta") - inputLine CanalEntrada.readLine()
- System.out.println(inputLine)
-
-
414 . Conexión mediante TCP/IP
Ejemplo. Cliente hola mundo.
- CanalSalida.close()
- CanalEntrada.close()
- SocketCliente.close()
- catch (UnknownHostException e)
- System.out.println("Referencia a host
no resuelta") - catch (IOException e)
- System.out.println("Error en las
comunicaciones"e) - catch (SecurityException e)
- System.out.println("Comunicacion no
permitida por razones de seguridad") -
-
424 . Conexión mediante TCP/IP
Ejemplo. Servidor hola mundo.
- public class TCPServidorHolaMundo
- public static void main(String args)
-
- InputStream FlujoDeEntrada
- OutputStream FlujoDeSalida
-
- try
- ServerSocket SocketServidor new
ServerSocket(8000) - Socket ComunicaConCliente
SocketServidor.accept() - System.out.println("Comunicacion
establecida") -
- FlujoDeEntrada ComunicaConCliente.getInp
utStream() - InputStreamReader CanalE new
InputStreamReader(FlujoDeEntrada) - BufferedReader CanalEntrada new
BufferedReader(CanalE) -
- String inputLine
- inputLine CanalEntrada.readLine()
434 . Conexión mediante TCP/IP
Ejemplo. Servidor hola mundo.
-
- FlujoDeSalida
ComunicaConCliente.getOutputStream() - OutputStreamWriter CanalS new
OutputStreamWriter(FlujoDeSalida) - PrintWriter CanalSalida new
PrintWriter(CanalS,true) - System.out.println("Mandando respuesta")
- CanalSalida.println("hola mundo de
nuevo") - System.out.println("hola mundo de
nuevo") - CanalSalida.close()
-
-
444 . Conexión mediante TCP/IP
Ejemplo. Servidor hola mundo.
-
-
- CanalEntrada.close()
- ComunicaConCliente.close()
- SocketServidor.close()
- catch (IOException e)
- System.out.println("Error en las
comunicaciones"e) - System.exit(0)
- catch (SecurityException e)
- System.out.println("Comunicacion no
permitida por razones de seguridad") - System.exit(0)
-
455 . Conexión mediante UDP/IP
UDP (User Datagram Protocol)
- En la transmisión sin conexión con Datagramas, un
mensaje se divide o puede dividirse en varios
fragmentos que pueden llegar en orden, en
desorden, o no llegar. - Este protocolo proporciona comunicaciones no
fiables, no esta orientado a conexión y por lo
tanto Java no asocia los Streams a los
datagramas.
465 . Conexión mediante UDP/IP
UDP (User Datagram Protocol)
- Puesto que en la cabecera de un paquete se
incluye el protocolo utilizado, los programas
asociados a cada protocolo se diferencian entre
sí, y pueden utilizar el mismo rango de puertos.
. - En la cabecera de un paquete UDP se incluye un
campo de redundancia para que en el destino se
compruebe la integridad de los datos.
475 . Conexión mediante UDP/IP
UDP (User Datagram Protocol)
- Cuando a un programa le llega un Datagrama,
necesita saber la dirección y el puerto del
programa origen para saber dónde debe contestar. - Cada mensaje UDP puede albergar hasta 508 bytes.
- Java proporciona dos clases para el uso del
protocolo - DatagramSocket
- DatagramPacket
485 . Conexión mediante UDP/IP
Establecimiento de comunicaciones
Programa cliente
Programa servidor
2.-new DatagramPacket
4.-new DatagramPacket
5.-new DatagramSocket
1.-new DatagramSocket
DatagramSocket
6.-send
DatagramSocket
Puerto destino
3.-recive
495 . Conexión mediante UDP/IP
DatagramPacket
- La clase DatagramPacket se usa para crear los
paquetes utilizados para enviar y/o recibir
información - En su construcción distinguimos entre la
recepción y el envío de paquetes. - Paquetes para recepción de datos
-
- DatagramPacket (byte buf, int longitud)
- Paquetes para envío de datos
- DatagramPacket (byte buf,int longitud,
InetAddress dir, - int puerto)
505 . Conexión mediante UDP/IP
DatagramPacket
- Métodos de acceso al estado interno de un
DatagramPacket - InetAddress getAddress()
- int getPort()
- byte getData()
- int getLength()
515 . Conexión mediante UDP/IP
DatagramSocket
- Sockets para enviar y recibir paquetes
- DatagramSocket() establece un socket (que le
asigna el computador) por el que se enviarán
paquetes a la red - DatagramSocket(int numPuerto) recibe un argumento
entero para establecer un puerto por el que se
recibirán paquetes de la red - Si no se logra establecer un DatagramSocket se
lanzará una SocketException.
525 . Conexión mediante UDP/IP
DatagramSocket
- Métodos de la clase DatagramSocket
- void receive (DatagramPacket p) se bloquea hasta
que llega un paquete y luego almacena el paquete
en su argumento p. - void send (DatagramPacket p) envía un paquete p
por la red (Si ocurre algún error al enviar o
recibir paquetes se lanza una IOException)