Download Sin título de diapositiva - DSIC

Document related concepts
no text concepts found
Transcript
TEMA 3.
Programación en red
1.
2.
3.
4.
5.
6.
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
1
Bibliografí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.
2
1 . Introducción
Diferentes formas de Computación

Computación monolítica. Un único ordenador,

Computación distribuida. Implica el uso de múltiples

Computación paralela. Implica el uso de varios

Computación cooperativa. En este tipo de proyectos
pueden acceder al sistema múltiples usuarios.
ordenadores conectados a la red.
procesadores simultáneos.
se divide la computación a gran escala entre las
máquinas de internet. Ej. Búsqueda de inteligencia
extraterrestre.
3
1 . 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í.
4
1 . Introducción
Internet

La familia de protocolos TCP/IP abarca los
siete niveles OSI (Open System
Interconnect).
5
1 . 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)
…

6
1 . 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
7
1 . 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.
8
1 . 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.
9
1 . 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.
10
1 . 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.
11
1 . Introducción
Esquema
12
1 . 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.
13
1 . 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
14
1 . 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.
15
1 . 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)
16
2 . 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.
17
2 . Dirección IP
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.
18
2 . Dirección IP
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.
19
2 . Dirección IP
La clase InetAddress

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
20
dirección Internet
2 . Dirección IP
La clase InetAddress
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(args[0]);
System.out.println(a);
}
21
}
3 . Conexión mediante URL
URL


Un URL es la dirección de un elemento o recurso en la
WWW:
[protocolo://][dirección][:puerto][/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
22
– Ruta es una ruta en la máquina del servidor
3 . Conexión mediante URL
La clase 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
URL
URL
URL

(String);
(URL, nombre_fich_relativo);
(esquema,anfitrión, nombref);
(esquema,anfitrión, p,nombref);
En caso de utilizar una sintaxis incorrecta se lanza la excepción
23
MalformedURLException
3 . Conexión mediante URL
La clase URL
Ejemplo:
URL info=new
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()
24
3 . Conexión mediante URL
Lectura desde un URL
URL urlobj = new URL(...);
InputStream in =
urlobj.openStream();
// lectura del canal haciendo
// uso de un filtro
BufferedReader c=new
BufferedReader(new
InputStreamReader(in));
String linea=c.readLine();
25
3 . Conexión mediante URL
Ejemplo
public class ReadUrl
{public static void readOut( String url,
OutputStream out){
try{
URL urlobj = new URL(url);
InputStream in = urlobj.openStream();
int c
While ((c=in.read())>-1)
out.write(c);
in.close();
}catch(MalformedURLExection e){;}
catch(IOExection e){;}
26
}}
3 . Conexión mediante URL
Comunicación con un 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.
27
3 . Conexión mediante URL
La clase URLConnection

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();

28
3 . Conexión mediante URL
La clase URLConnection

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).
29
3 . Conexión mediante URL
La clase URLConnection














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(args[0]);
URL url = new URL("http://java.sun.com/cgi-bin/backwards");
URLConnection connection = url.openConnection();
connection.setDoOutput(true);

30
3 . Conexión mediante URL
La clase URLConnection
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("MalformedURLException: " + me);
} catch (IOException ioe) {
System.err.println("IOException: " + ioe);
}
31
4 . 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.
32
4 . 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 al33
menos muchos de ellos.
4 . 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.
34
4 . 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.
35
4 . 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
36
4 . 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
Puerto destino
Socket
Nodo destino
Puerto
6.-Comunicación
37
4 . 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
38
4 . 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.getOutputStream();
OutputStreamWriter CanalS = new OutputStreamWriter(FlujoDeSalida);
PrintWriter CanalSalida = new PrintWriter(CanalS,true);
39
4 . Conexión mediante TCP/IP
Ejemplo. Cliente hola mundo.
System.out.println("enviando texto");
CanalSalida.println("Hola Mundo");
FlujoDeEntrada = SocketCliente.getInputStream();
InputStreamReader CanalE = new InputStreamReader(FlujoDeEntrada);
BufferedReader CanalEntrada = new BufferedReader(CanalE);
String inputLine;
System.out.println("esperando respuesta");
inputLine = CanalEntrada.readLine();
System.out.println(inputLine);
40
4 . 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");
}}}
41
4 . 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.getInputStream();
InputStreamReader CanalE = new InputStreamReader(FlujoDeEntrada);
BufferedReader CanalEntrada = new BufferedReader(CanalE);
String inputLine;
inputLine = CanalEntrada.readLine();
System.out.println(inputLine);
42
4 . 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();
43
4 . 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);
}}}
44
5 . 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.
45
5 . 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.
46
5 . 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
47
5 . 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
3.-recive
Puerto destino
Puerto destino
Nodo destino
48
5 . 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)
49
5 . Conexión mediante UDP/IP
DatagramPacket

Métodos de acceso al estado interno
de un DatagramPacket:
InetAddress getAddress()
int getPort()
byte[] getData()
int getLength()
50
5 . 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.
51
5 . 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)
52