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 Report

Transcript 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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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; iSystem.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