Download Transparencias del Tema 16 - Departamento de Ingeniería Telemática

Document related concepts
no text concepts found
Transcript
Tema 16: Comunicaciones en Red
Fundamentos
de Telemática
Área de Ingeniería Telemática
1
Universidad de Sevilla
Índice
Introducción.
Socket.
URL.
Datagramas.
Fundamentos
de Telemática
Área de Ingeniería Telemática
2
Universidad de Sevilla
Introducción
Se puede realizar con cualquier lenguaje
java.net
Las clases encapsulan el paradigma de “socket”
(conectores) creados por BSD (Berkeley Software
Distribution) en la Universidad de Berkeley.
UNIX 4.2BSD (Bill Joy, en Sun Microsystems).
Los programas Java están en la capa de aplicación.
Pasos: Abrir, leer/escribir, cerrar.
Fundamentos
de Telemática
Área de Ingeniería Telemática
3
Universidad de Sevilla
TCP (Transport Control Protocol)
Comunicaciones fiables, establecen una conexión y
comunicaciones en ambos sentidos.
El orden en que se envían y reciben los datos es
crítico.
Servicio telefónico.
Ejemplos:
 HTTP (Hypertext Transfer Protocol)
 FTP (File Transfer Protocol)
 Telnet
Clases: URL, URLConnection, Socket y
ServerSocket.
Fundamentos
de Telemática
Área de Ingeniería Telemática
Universidad de Sevilla
4
UDP (User Datagram Protocol)
No está orientado a conexión. No se garantiza la
entrega.
Servicio postal.
Los paquetes de datos: datagramas.
Clases: DatagramPacket, DatagramSocket y
MulticastSocket.
Fundamentos
de Telemática
Área de Ingeniería Telemática
5
Universidad de Sevilla
Puertos
Distingue la aplicación dentro de la máquina.
Los datos van acompañados de
 la dirección de la computadora (32 bits)
 el puerto al que va destinado (16 bits)
Rango para los puertos: 0-65535
Fundamentos
de Telemática
Área de Ingeniería Telemática
6
Universidad de Sevilla
Servidor
Puerto
Cliente
Fundamentos
de Telemática
Área de Ingeniería Telemática
7
Universidad de Sevilla
Aplic.
Aplic.
Aplic.
Aplic.
puerto
puerto
puerto
puerto
TCP o UDP
Datos
#puerto
Datos
Fundamentos
de Telemática
Área de Ingeniería Telemática
8
Universidad de Sevilla
Conectores reservados
 TCP/IP reserva los primeros 1024 para sus protocolos
específicos.
Puerto
Servicio
13/udp
21/tcp
23 /tcp
25 /tcp
79 /tcp
80 /tcp
119 /tcp
daytime
ftp
telnet
E-mail
finger
HTTP
netnews
Fundamentos
de Telemática
Área de Ingeniería Telemática
9
Universidad de Sevilla
Servicio de nombres de Dominio (DNS)
Existe una jerarquía de nombres asociada a los
números que representan las direcciones que se
conoce como DNS.
Permite teclear www.yahoo.com en vez de
205.216.146.71.
Fundamentos
de Telemática
Área de Ingeniería Telemática
10
Universidad de Sevilla
Aplicación
(HTTP, ftp, telnet, ...)
Transporte
(TCP, UDP, ...)
Red
(IP, ...)
Fundamentos
de Telemática
Enlace
(dispositivo driver, ...)
Área de Ingeniería Telemática
11
Universidad de Sevilla
El paquete java.net (I)
SocketImpl
Socket
ServerSocket
SocketPermission
Clase abstracta.
Implementa un cliente Socket.
Implementa un servidor Socket.
Acceso a la red vía socket
Fundamentos
de Telemática
Área de Ingeniería Telemática
12
Universidad de Sevilla
El paquete java.net (II)
URL
URLConnection
URLClassLoader
Puntero a un recurso en la world wide web
Clase abstracta. Superclase para comunic. entre aplic y URL.
Carga clases y recursos
URLDecoder
Convierte el formato MIME en String
URLEncoder
Convierte el formato String en MIME
URLStreamHandler
Clase abstracta.
HttpURLConnection
Un URLConnection con soporte para características http.
JarURLConnection
ContentHandler
Uso de archivos JAR
Clase abstracta.
Fundamentos
de Telemática
Área de Ingeniería Telemática
13
Universidad de Sevilla
El paquete java.net (III)
DatagramPacket
Clase que representa un datagrama.
DatagramSocket
Tx/Rx de datagramas en un socket.
MulticastSocket
Tx/Rx de paquetes IP multicast.
Fundamentos
de Telemática
Área de Ingeniería Telemática
14
Universidad de Sevilla
El paquete java.net (y IV)
InetAddress
Authenticator
NetPermission
PasswordAuthentication
Respresenta una dirección de IP.
Autentificación para una conexión a la red.
Clase para permisos en la red.
Para autentificación
Fundamentos
de Telemática
Área de Ingeniería Telemática
15
Universidad de Sevilla
InetAddress
 Encapsula direcciones IP y sus nombres.
 No tiene constructores visibles, pero se proporcionan métodos
estáticos.
 static InetAddress getLocalHost()
 Devuelve el objeto que representa al nodo local.
 static InetAddress getByName(String nomNodo)
 Devuelve el nombre del nodo que se le pasa.
 Puede lanzar UnknownHostException (excepción de nodo
desconocido).
 static InetAddress[] getAllByName(String nomNod)
 devuelve una matriz que representa todas las direcciones en
las que se traduce un nombre dado.
Fundamentos  Puede lanzar UnknownHostException.
16
de Telemática
Área de Ingeniería Telemática
Universidad de Sevilla
import java.net.InetAddress;
class dire{
public static void main(String args[]) {
InetAddress direccion;
try{
direccion = InetAddress.getLocalHost();
System.out.println(direccion);
System.out.println();
direccion = InetAddress.getByName("trajano.us.es");
System.out.println(direccion);
System.out.println();
InetAddress SW[] = InetAddress.getAllByName("trajano.us.es");
for(int i = 0; i<SW.length; i++)
System.out.println(SW[i]);
}catch (Exception e){
System.out.println("Error en ejecución: "+e);
}
}
}
/*
[16]-adriano:Mon> java dire
adriano/193.147.162.138
trajano.us.es/193.147.162.130
trajano.us.es/193.147.162.130
Fundamentos
[17]-adriano:Mon>
de*/Telemática
Área de Ingeniería Telemática
17
Universidad de Sevilla
Métodos no estáticos
String getHostName()
 Devuelve como cadena el nombre del nodo.
byte[] getAddress()
 Devuelve una matriz de bytes de cuatro elementos
que representa la dirección en Internet del objeto en
el "orden de bytes de la red".
String toString()
 Devuelve el nombre del nodo y la dirección IP.
Ejemplo, "starwave.com/192.147.170.6".
boolean equals(InetAddress otroNodo)
Fundamentos  Devuelve true si los objeto tiene la misma dirección.
18
de Telemática
Área de Ingeniería Telemática
Universidad de Sevilla
Socket
Socket: Comunic. de bajo nivel.
URL y URLConnection: Comunic. de alto nivel.
Sobre TCP, cada programa establece una conexión
(cliente-servidor) y va ligado a un socket.
Los socket son puntos finales del enlace.
Los procesos los trata como descriptores de ficheros.
El Cliente conoce:
 el nombre la máquina servidora
 número de puerto al que está conectado
El Servidor:
Fundamentos
 Acepta la conexión
de Telemática
Área de Ingeniería Telemática
Universidad de Sevilla
19
Modelo de Comunicaciones
Servidor
Cliente
ServerSocket(#port)
Socket(host,#port)
accept()
OutputStream
OutputStream
InputStream
InputStream
close()
close()
Fundamentos
de Telemática
Área de Ingeniería Telemática
20
Universidad de Sevilla
Constructores para el cliente
Cuando se crea un objeto Socket, se establece una
conexión entre cliente y servidor.
Socket(String nodo, int puerto)
 Crea un conector que conecta el nodo local con el
nodo y puerto especificados.
Socket(InetAddress dirección, int puerto)
 Crea un conector utilizando un objeto InetAddress
ya existente y un puerto.
En total son 8 constructores (versión 1.2).
Puede lanzar UnknownHostException o
IOException.
Fundamentos
de Telemática
Área de Ingeniería Telemática
Universidad de Sevilla
21
Información del Socket y flujos
 InetAddress getInetAddress()
 Devuelve la InetAddress asociada con el objeto Socket.
 int getPort()
 Devuelve el puerto remoto al que está conectado este objeto Socket.
 int getLocalPort()
 Devuelve el puerto local al que está conectado este objeto Socket.
 InputStream getInputStream()
 Devuelve el InputStream (flujo de entrada) asociado con este
conector.
 OutputStream getOutputStream()
 Devuelve el OutputStream (flujo de salida) asociado con este
conector.
 void close()
Cierra el InputStream y el OutputStream.
Fundamentos
de Telemática 
Área de Ingeniería Telemática
22
Universidad de Sevilla
Constructores para el Servidor
ServerSocket(int puerto)
 Crea un conector en el servidor en un puerto
específico.
ServerSocket(int puerto, int backlog)

Se configura la longitud máx. de la cola de entrada.
ServerSocket(int port, int backlog, InetAddress dir)

Ligada a una dirección.
Fundamentos
de Telemática
Área de Ingeniería Telemática
23
Universidad de Sevilla
Creación de flujos de Entrada
En el cliente se crea un flujo de entrada para recibir
las respuestas del servidor (DataInputStream)
Socket sock = new Socket(“host”,puerto);
DataInputStream in = new DataInputStream(sock.getInputStream());
DataInputStream tiene métodos como read(),
readLine(), readChar(), readInt(), …
En el servidor también, para recibir a los clientes
ServerSocket sock = new ServerSocket(puerto);
Fundamentos
de Telemática
Área de Ingeniería Telemática
24
Universidad de Sevilla
Creación de flujos de Salida
En el cliente se crea un flujo de salida para enviar
información al servidor (DataOutputStream o
PrintStream)
PrintStream out = new PrintStream(sock.getOutputStream());
DataOutputStream out = new
DataInputStream(sock.getOutputStream());
PrintStream tiene los métodos write y println.
DataOutputStream escribe los datos primarios y
writeBytes.
En el servidor se envía información al cliente
PrintStream out = new PrintStream(sock.getOutputStream());
Fundamentos
de Telemática
Área de Ingeniería Telemática
25
Universidad de Sevilla
import java.net.*;
import java.io.*;
class Whois{
public static void main(String args[]) throws Exception{
int c;
Socket s = new Socket("intermic.net",43);
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
String str = (args.length==0 ? ”starwave.com”: args[0]+"\n”);
byte buf[] = new byte[str.length()];
str.getBytes(0,str.length(), buf, 0 );
out.write(buf);
while((c = in.read()) != -1) {
System.out.println((char)c);
}
s.close();
in.close();
out.close();
}
}
Fundamentos
26
de Telemática
Área de Ingeniería Telemática
Universidad de Sevilla
import java.io.*;
import java.net.*;
public class EchoClient {
public static void main(String[] args) throws IOException {
Socket echoSocket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
echoSocket = new Socket("adriano", 7);//crea un socket
// dos siguientes lineas son para leer/escribir en socket
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new
InputStreamReader(echoSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("No conoce el host: adriano.");
} catch (IOException e) {
System.err.println("Error E/S en la conexion: adriano.");
}
Fundamentos
de Telemática
Área de Ingeniería Telemática
Continúa ...
27
Universidad de Sevilla
Continuación …
if(echoSocket!=null&& in!=null && out!=null){
BufferedReader stdIn = new BufferedReader(new
InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("echo: " + in.readLine());
}
out.close();
in.close();
stdIn.close();
echoSocket.close();
}
}
}
Fundamentos
de Telemática
Área de Ingeniería Telemática
28
Universidad de Sevilla
URL (Uniform Resource Locator)
Referencia (dirección) de un recurso de Internet.
http://java.sun.com
Nombre del recurso
Identificador de protocolo
Protocolos: HTTP, FTP, Gopher, File y News.
Nombre del recurso:
Nombre host
Nombre fichero
Número de Puerto
Fundamentos
Referencia
Nombre de la máquina en la que está el recurso.
Nombre del camino al fichero en la máquina.
Puerto al que se conecta (opcional).
Referencia al nombre (opcional).
29
de Telemática
Área de Ingeniería Telemática
Universidad de Sevilla
Constructores (I)
URL absoluto, contiene toda la información para
alcanzar el recurso
 URL(String cad), ejemplo
URL gamelan = new URL("http://www.gamelan.com/");
URL relativo, los ficheros HTML dan de forma
relacionada con el fichero en el que están.
 URL(URL base ,String relativo), ejemplo
URL game = new URL("http://www.gamelan.com/pages/");
URL gamelan = new URL(game,”Gamelan.html");
Fundamentos
de Telemática
Área de Ingeniería Telemática
30
Universidad de Sevilla
Constructores (y II)
URL(String proto, String host, int port, String file)
URL(String proto, String host, String file)
URL gam = new URL ("http", ”www.gamelan.com”,
80, "/pages/Gamelan. html");
Crea un objeto URL para el siguiente URL:
http://www.gamelan.com:80/pages/Gamelan.network.
html
MalformedURLException
 Si el protocolo es desconocido o los argumentos del
constructor son incorrectos.
Los objetos URL se escriben una vez (no se pueden 31
Fundamentos
de Telemática
cambiar).
Área de Ingeniería Telemática
Universidad de Sevilla
Métodos
 String getProtocol()
Devuelve el componente identificador de protocolo del URL
 String getHost()
Devuelve el nombre de host del URL
 int getPort()
Devuelve
el número de puerto del componente URL. Devuelve
un entero que es el número de puerto. Si el puerto no es
asignado explicitamente devuelve -1.
 String getFile()
Devuelve el nombre del fichero del componente del URL.
 String toExternalForm()
Devuelve una cadena que representa un URL.
Fundamentos
de Telemática
Área de Ingeniería Telemática
32
Universidad de Sevilla
Ejemplo
import java.net.*;
class Patric{
public static void main(String args[]) throws MalformedURLException{
URL hp = new URL ("http://www.starwave.com/people/naughton/");
System.out.println("Protocolo: "+ hp.getProtocol());
System.out.println("Puerto: "+ hp.getPort());
System.out.println("Nodo: "+ hp.getHost());
System.out.println("Archivo: "+ hp.getFile());
System.out.println("Ext: "+ hp.toExternalForm());
}
}
/*
Protocolo: http
Puerto: -1
Nodo: www.starwave.com
Archivo: /people/naughton/
Ext: http://www.starwave.com/people/naughton/
*/
Fundamentos
de Telemática
Área de Ingeniería Telemática
33
Universidad de Sevilla
Conexión a un URL
URLConnection openConnection()
import java.net.*;
import java.io.*;
class URL0{
public static void main(String args[]) {
try{
URL yahoo = new URL ("http://www.yahoo.com/");
yahoo.openConnection();
System.out.println("OK ");
}catch(MalformedURLException e){
System.out.println("Excep: " + e);
}catch(IOException e){
System.out.println("Excep: " + e);
}
}
}
Fundamentos
de Telemática
Área de Ingeniería Telemática
34
Universidad de Sevilla
Leyendo de un URL
InputStream openStream()
import java.net.*;
import java.io.*;
class URL1{
public static void main(String args[]) throws Exception{
URL yahoo = new URL ("http://www.yahoo.com/");
BufferedReader in = new BufferedReader(
new InputStreamReader(yahoo.openStream()));
String inputLine;
while((inputLine = in.readLine())!= null)
System.out.println(inputLine);
in.close();
}
}
Fundamentos
de Telemática
Área de Ingeniería Telemática
35
Universidad de Sevilla
Leyendo de un URLConnection
InputStream getInputStream()
import java.net.*;
import java.io.*;
class URL2{
public static void main(String args[]) throws Exception{
URL yahoo = new URL ("http://www.yahoo.com/");
URLConnection yc = yahoo.openConnection();
BufferedReader in = new BufferedReader(
new InputStreamReader(yc.getInputStream()));
String inputLine;
while((inputLine = in.readLine())!= null)
System.out.println(inputLine);
in.close();
}
Fundamentos
}
de Telemática
Área de Ingeniería Telemática
36
Universidad de Sevilla
Datagramas
Los Datagramas se implementan sobre el protocolo
UDP, con dos clases:
DatagramPacket, contiene los datos
DatagramSocket, es el mecanismo para enviar o
recibir los DatagramPacket.
Fundamentos
de Telemática
Área de Ingeniería Telemática
37
Universidad de Sevilla
Métodos
InetAddress getAddress()
 Devuelve la dir. de destino (para envíos)
int getPort()
 Devuelve el número de puerto.
byte[] getData()
 Devuelve el contenido del datagrama
int getLength()
 Devuelve la longitud de los datos válidos
Fundamentos
de Telemática
Área de Ingeniería Telemática
38
Universidad de Sevilla