Publicado el 5 de Octubre del 2020
585 visualizaciones desde el 5 de Octubre del 2020
2,3 MB
33 paginas
Creado hace 14a (10/04/2011)
Federico Peinado
www.federicopeinado.es
Depto. de Ingeniería del Software e
Inteligencia Artificial
disia.fdi.ucm.es
Facultad de Informática
www.fdi.ucm.es
Universidad Complutense de Madrid
www.ucm.es
Conjunto de máquinas conectadas a través de una
topología física y uno o más protocolos lógicos
Los protocolos más relevantes (Transport Control
Protocol e Internet Protocol) son los que dan nombre a
las conocidas redes TCP/IP (como es el caso de Internet)
• Cada máquina está identificada por una dirección IP, 4 bytes
expresados como 4 números entre 0 y 255
Por ejemplo 147.96.1.9
• Las máquinas sólo entienden direcciones IP, pero no nombres de
dominio (DNS). Son los servidores de nombres los que traducen
nombres de dominio a IPs.
Por ejemplo www.ucm.es
• Una conexión TCP/IP sólo conecta dos ordenadores distintos
(existiendo, en principio, por cada máquina una sola conexión a
la vez)
Laboratorio de Programación de Sistemas – Red y conexión remota
2
Para ser precisos cada conexión IP se asocia a una dirección IP y un
puerto determinado (como un casillero interno) dentro de la
máquina de destino
• Los puertos se identifican mediante 2 bytes, un número entre 0 y 65535
Gracias a los puertos, cada aplicación puede recibir distintas
conexiones (cada una en un puerto distinto, claro)
• Cada aplicación define en qué puertos escucha
• Los clientes se conectan al puerto especificado
Los 1024 primeros puertos de todas las máquinas están “reservados”
para aplicaciones concretas (aunque algunos no se usan)
• Algunos de los más conocidos: 21 (ftp), 23 (telnet), 25 (smtp), 80 (http),
etc. porque los programas de un servidor que implementa estos
protocolos siempre escuchará en estos puertos
Laboratorio de Programación de Sistemas – Red y conexión remota
3
Los protocolos de transporte sirven para enviar información
sofisticada de un puerto de una máquina al puerto de otra
• Los protocolos de aplicación son aún de más alto nivel y dependerán de
la aplicación concreta
Protocolos de transporte que se utilizan en redes IP:
• TCP
Protocolo basado en la conexión punto a punto que provee un flujo
fiable de datos entre dos máquinas
Ejemplos: HTTP, FTP, SMTP…
• UDP (User Datagram Protocol)
Protocolo para envío de paquetes de datos de manera independiente,
llamados datagramas, de una computadora a otra sin garantizar su
llegada
Ejemplos: MMS (streaming de video), intercambio de fuentes en redes P2P…
Laboratorio de Programación de Sistemas – Red y conexión remota
4
Según este modelo, hay dos tipos de máquinas: los
clientes y los servidores. Los clientes se conectan a
servidores, les hacen solicitudes de servicios y estos
responden proporcionándolos
• Ejemplos: Navegadores/servidores web, clientes/servidores de
Clientes y servidores establecen conexiones TCP y se
intercambian remotamente datos a través de sockets
• Vínculos de comunicación que se crean entre dos aplicaciones
según el protocolo TCP (siempre asociados a una dirección IP y
un puerto)
correo…
• Puntos finales de la comunicación en Internet
Un cliente se comunica con un servidor estableciendo
una conexión con el socket que tiene el servidor
• Conociendo la dirección IP del servidor y el puerto de conexión
Laboratorio de Programación de Sistemas – Red y conexión remota
5
Laboratorio de Programación de Sistemas – Red y conexión remota
6
Laboratorio de Programación de Sistemas – Red y conexión remota
7
Java tiene diversos mecanismos para la red
• Sockets: Acceso avanzado para comunicación
fiable (TCP)
• Datagramas: Acceso avanzado para comunicación
no fiable (UDP)
• JDBC: Permite acceso remoto a bases de datos
• URLs: Acceso simple orientado a la web
• RMI: Invocación Remota de Procedimientos
• Servicios web
• …
Laboratorio de Programación de Sistemas – Red y conexión remota
8
Estudiaremos conexiones TCP de bajo nivel
• Es decir, el protocolo de aplicación lo definiremos
nosotros
• Para cuando ambas aplicaciones son Java existen
mecanismos de más alto nivel (como RMI)
En Java las clases relacionadas con la red
están dentro del paquete java.net
• La clase InetAddress sirve para trabajar con
direcciones de red
• La clase Socket representa un socket
• La clase ServerSocket facilita la creación de sockets
para esperar conexiones de clientes
Laboratorio de Programación de Sistemas – Red y conexión remota
9
Sirve para manejar direcciones de Internet
• Gestión de nombres de dominio
• Validación de direcciones IPs
InetAddress host = InetAddress.getByName("www.ucm.es");
System.out.println("Host name: " host.getHostName());
System.out.println("IP address: " +
host.getHostAddress());
Laboratorio de Programación de Sistemas – Red y conexión remota
10
Laboratorio de Programación de Sistemas – Red y conexión remota
11
Implementa una conexión tipo “socket de
cliente” basado en una conexión punto a punto
Al crearlo, se le pasa una dirección IP y un puerto
Una vez establecida la conexión, ofrece flujos
para leer y escribir en el socket
• Tiene asociado un flujo de entrada
InputStream getInputStream()
• Tiene asociado un flujo de salida
OutputStream getOutputStream()
Laboratorio de Programación de Sistemas – Red y conexión remota
12
1. Abrir la conexión (Socket)
2. Crear los flujos de entrada y salida
asociados a dicha conexión
3. Leer y escribir de los flujos de entrada y
salida de acuerdo al protocolo de
aplicación que hayamos definido
4. Cerrar los flujos de entrada y salida
5. Cerrar la conexión
Laboratorio de Programación de Sistemas – Red y conexión remota
13
Requisitos: que sea capaz de solicitar a
www.ucm.es su página web inicial
Utilizamos el protocolo HTTP (puerto 80)
El protocolo de aplicación será:
1. El cliente se conecta al puerto 80 del servidor
2. El cliente escribe en el socket la cadena “GET”
seguido del nombre del fichero (página)
3. El servidor envía por el socket el fichero (página)
4. El servidor cierra la conexión
Luego el cliente ya no leerá más información
Laboratorio de Programación de Sistemas – Red y conexión remota
14
public static void main(String[] args) {
import java.net.*;
import java.io.*;
public class Client {
Socket s = null;
BufferedReader in = null;
PrintWriter out = null;
// 1. Abrimos la conexión
// 2. Creamos los flujos de entrada y salida
// 3. Escribimos la solicitud (GET)
// 4. Leemos hasta que no haya nada más
// 5. Cerramos la conexión
...
}}
Laboratorio de Programación de Sistemas – Red y conexión remota
15
// 1. Abrimos la conexión
try {s = new Socket("www.google.es", 80);
} catch (IOException ex) {
System.err.println("Error conectándonos al servidor.");
System.err.println(ex);
return;
s.getInputStream()));
// 2. Creamos los flujos de entrada y salida
}
try {in = new BufferedReader(new InputStreamReader(
out = new PrintWriter(s.getOutputStream());
} catch (IOException ex) {
System.err.println("Error al crear los flujos");
System.err.println(ex);
return;
}
Laboratorio de Programación de Sistemas – Red y conexión remota
16
System.out.println(entrada);
// 5. Cerramos la conexión
// 4. Leemos hasta que no haya nada más
// 3. Escribimos la solicitud (GET)
out.println("GET index.html");
out.flush(); // Nos aseguramos que se envía
String entrada;
try {while ((entrada = in.readLine()) != null)
} catch (IOException ex) {
System.err.println("Error de lectura.");
System.err.println(ex);
}
try {in.close();
out.close();
s.close();
} catch (IOException ex) {
System.err.println("Error cerrando la entrada.");
System.err.println(ex);
}
Laboratorio de Programación de Sistemas – Red y conexión remota
17
try { Socket s = new Socket ("www.ucm.es", 80);
InputStreamReader(s.getInputStream()));
BufferedReader in = new BufferedReader (new
PrintWriter out = new PrintWriter(s.getOutputStream(), true);
out.println("GET / HTTP/1.0");
out.println();
boolean more = true;
while (more) {
String line = in.readLine();
if (line == null)
more = false;
elseSystem.out.println(line);
}
} catch (IOException e) {
}
e.printStackTrace();
Aparecerá el código HTML tomado de aquí…
Laboratorio de Programación de Sistemas – Red y conexión remota
18
Laboratorio de Programación de Sistemas – Red y conexión remota
19
Implementa un conexión tipo “socket de
servidor” asociada a una dirección IP y un puerto
Espera hasta que se conecta algún cliente y le
asigna un socket cliente
• Socket accept();
• ¡Ojo! La comunicación se realiza entre Sockets iguales,
ServerSocket sólo ayuda a establecer dicha conexión
• El Socket asociado al ServerSocket tiene los
correspondientes flujos de entrada y salida
InputStream getInputStream()
OutputStream getOutputStream()
Laboratorio de Programación de Sistemas – Red y conexión remota
20
1. Se crea el servidor de escucha (SocketServer)
2. Se bloquea esperando una conexión (Socket)
3. Un vez conectado un cliente, se crean los
• El bloqueo puede tener un cierto timeout
flujos de entrada y salida asociados a la
conexión
4. Se lee y escribe en ellos en base al protocolo
de aplicación que hayamos definido
5. Se cierran los flujos de entrada y salida, y
también la conexión
6. Se cierra el servidor de escucha
Laboratorio de Programación de Sistemas – Red y conexión remota
21
Requisitos: que sepa esperar y atender a al
cliente que se conecte por el puerto 4444
1. Cuando alguien se conecta se le envía la cadena
“Dime algo”
2. El servidor se queda leyendo del flujo de entrada
de la conexión
3. Todo lo que llega lo va escribiendo por pantalla
Laboratorio de Programación de Sistemas – Red y conexión remota
22
import java.net.*;
import java.io.*;
class Server {
}
}
public static final int PUERTO = 4444;
public static void main(String []args) {
ServerSocket ss;
Socket conexion;
BufferedReader conIn;
BufferedWriter conOut;
// 1. Creamos el servidor de escucha
// 2. Esperamos una conexión
Comentarios de: LPS: Red y conexión remota (0)
No hay comentarios