Tema 16: Comunicaciones en Red Fundamentos de Telemática Área de Ingeniería Telemática Universidad de Sevilla Índice Introducción. Socket. URL. Datagramas. Fundamentos de Telemática Área de Ingeniería Telemática Universidad de Sevilla Introducción Se puede realizar con.
Download ReportTranscript Tema 16: Comunicaciones en Red Fundamentos de Telemática Área de Ingeniería Telemática Universidad de Sevilla Índice Introducción. Socket. URL. Datagramas. Fundamentos de Telemática Área de Ingeniería Telemática Universidad de Sevilla Introducción Se puede realizar con.
Slide 1
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 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
Slide 2
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 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
Slide 3
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 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
Slide 4
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 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
Slide 5
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 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
Slide 6
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 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
Slide 7
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 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
Slide 8
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 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
Slide 9
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 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
Slide 10
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 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
Slide 11
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 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
Slide 12
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 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
Slide 13
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 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
Slide 14
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 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
Slide 15
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 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
Slide 16
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 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
Slide 17
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 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
Slide 18
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 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
Slide 19
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 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
Slide 20
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 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
Slide 21
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 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
Slide 22
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 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
Slide 23
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 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
Slide 24
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 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
Slide 25
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 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
Slide 26
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 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
Slide 27
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 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
Slide 28
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 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
Slide 29
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 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
Slide 30
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 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
Slide 31
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 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
Slide 32
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 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
Slide 33
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 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
Slide 34
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 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
Slide 35
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 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
Slide 36
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 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
Slide 37
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 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
Slide 38
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 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
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
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
}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
Slide 2
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
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
}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
Slide 3
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
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
}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
Slide 4
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
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
}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
Slide 5
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
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
}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
Slide 6
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
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
}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
Slide 7
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
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
}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
Slide 8
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
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
}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
Slide 9
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
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
}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
Slide 10
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
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
}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
Slide 11
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
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
}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
Slide 12
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
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
}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
Slide 13
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
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
}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
Slide 14
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
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
}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
Slide 15
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
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
}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
Slide 16
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
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
}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
Slide 17
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
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
}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
Slide 18
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
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
}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
Slide 19
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
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
}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
Slide 20
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
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
}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
Slide 21
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
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
}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
Slide 22
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
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
}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
Slide 23
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
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
}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
Slide 24
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
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
}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
Slide 25
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
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
}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
Slide 26
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
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
}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
Slide 27
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
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
}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
Slide 28
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
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
}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
Slide 29
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
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
}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
Slide 30
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
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
}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
Slide 31
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
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
}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
Slide 32
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
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
}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
Slide 33
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
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
}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
Slide 34
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
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
}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
Slide 35
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
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
}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
Slide 36
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
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
}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
Slide 37
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
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
}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
Slide 38
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
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
}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