Download Fundamentos de Redes de Computadores

Document related concepts
no text concepts found
Transcript
Módulo ECI - 11: Fundamentos de Redes de Computadores
1
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Módulo ECI - 11: Fundamentos de Redes de Computadores
La Clase InetAddress
 Una direccion IP es la dirección absoluta de un computador
cualquiera en toda la internet. En la versión actual consiste en
un valor guardado en 4bytes. Datos pueden ser mandados de
un computador a otro en la internet sólo si se tiene este número
del destinatario.
 No tiene constructores, se crea un nuevo objeto InetAddress
haciendo
 InetAddress n = InetAddress.getLocalHost()
 InetAddress n = InetAddress.getByName(nombre)
 Y tiene los siguientes métodos:
 String nombre = n.getHostName()
 String direccion = n.getHostAddress()
 ver programa ejemplo InetExample.java
2
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Módulo ECI - 11: Fundamentos de Redes de Computadores
The URL class
• URL = Uniform Resource Locator
• Is used to connect a Java program to a
Web server and read (download) the
resources it offers
PURL
3
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Módulo ECI - 11: Fundamentos de Redes de Computadores
La Clase URL
Un URL es un UNIFORM RESOURCE LOCATOR. Consiste en
una dirección de un recurso que un servidor en la internet pone a
disposición de los usuarios, como por ej. http://www.arminco.com
En un objeto URL existen dos componentes principales: El
descriptor de protocolo (ej. http) y el nombre del recurso (ej.
www.arminco.com). http significa Hyper Text Transfer protocol
pero hay otros protocolos de transferencia de datos en la internet
como: el File Transfer protocol (ftp), Gopher, File o News.
En java es posible abrir una dirección de URL leer el contenido
como si fuera un archivo cualquiera. Para ello debemos crear un
objeto URL, con el nombre del protocolo y la dirección del recurso
que queremos recuperar.
4
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Módulo ECI - 11: Fundamentos de Redes de Computadores
La Clase URL (2)
Existen varios constructores de URL:
URL unRUL = new URL(“http://www.arminco.com/index.html”);
unURL = new URL(“http”;”www.arminco.com”,”index.html”);
inURL = new URL(“http”,”www.arminco.com”,80,”index.html”);
Al crear una variable URL se puede producir una excepcion del tipo
MalformedURLException por eso se deben tomar las medidas
necesarias (como por ej: usar un bloque try-catch)
try {
URL miURL = new URL(....); }
catch(MalFormedURLException e) {
// codigo para atrapar la exception
}
Métodos que se pueden aplicar a un objeto de la clase URL:
getProtocol(), getHost(), getPort(), getFile(), openConnection()
5
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Módulo ECI - 11: Fundamentos de Redes de Computadores
La Clase URL (3)
Si sabemos a priori que el contenido de un URL es texto podemos leerlo
de la siguiente manera:
import java.net.*;
import java,io.*;
public class Leer URL {
public static void main(String args[]) {
try {
URL miURL = new URL(“http://www.dcc.uchile.cl”);
URLConnection c = miURL.openConnection();
BufferedReader in = new BufferedReader (
new InputStreamReader(c.getInputStream()));
String line;
while ((line = in.readLine() != null)
System.out.prinln(line);
c.close();
catch(MalFormedURLException e) { }
}
}
Ejercicio: programar esto pero permitir dar el http como parámetro
6
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Módulo ECI - 11: Fundamentos de Redes de Computadores
TCP: communication with data flow
With TCP a communication channel between both
computers is built and a reliable communication is
established between both computers. This allows to
send a data flow rather tan datagrams.
www.waseda2.jp
www.waseda1.jp
A SERVER
A CLIENT
?
4444
3333
7
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Módulo ECI - 11: Fundamentos de Redes de Computadores
TCP: communication with data flow
After the client contacts the server, a reliable channel is
established. After this, client and server may begin
sending data through this channel. The other should be
reading this data: They need a protocol !!!!
www.waseda2.jp
www.waseda1.jp
bla
A SERVER
4444
bla
bla bla
A CLIENT
3333
8
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Módulo ECI - 11: Fundamentos de Redes de Computadores
TCP: How is reliability achieved ?
The internet itself works only with the datagram paradigm.
Internet frames are may “get lost” (destroyed): For every frame
delivered carrying a part of the data flow there is a confirmation!
Sending
bla bla bla
Sending 1st bla
Ack 1st bla
Sending 2nd bla
Ack 2nd bla
Sending 3rd bla
Ack 3rd bla
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
9
Módulo ECI - 11: Fundamentos de Redes de Computadores
What if a message get lost ?
The server waits a certain amount of time. If it does not
receive any confirmation it sends the message again.
Sending
bla bla bla
Sending 1st bla
Ack 1st bla
Sending 2nd bla
LOST !!!
No confirmation !!!
Sending 2nd bla again
Ack 2nd bla
10
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Módulo ECI - 11: Fundamentos de Redes de Computadores
The Window for improving efficiency
The transmitter will handle a set of not acknowledged packets
Sending 1st bla
Sending 2nd bla
Sending 3rd bla
Ack 1st bla
Ack 2nd bla
Ack 3rd bla
11
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Módulo ECI - 11: Fundamentos de Redes de Computadores
El Socket
 Un socket es un extremo de un link de comunicación entre dos
programas que corren en una red. El socket esta asociado
(amarrado, bound) a ub número de port de modo que la capa
TCP pueda identificar exactamente la aplicación a la cual están
destinados los datos que llegan a un computador.
Normalmente un servidor que corre en un computadore
específico tiene un socket que está asociado a un número de port
específico. El servidor espera, “oyendo” por el socket a que un
cliente quiera establecer alguna comunicación.
Para que un cliente pueda comuncarse con el servidor debe saber
a que port está asociado el socket por el cual el servidor está
aceptando llamadas. Para hacer una petición de conexión el
cliente debe tratar de hacer un rendezvous con por el port donde
está escuchando el servidor.
12
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Módulo ECI - 11: Fundamentos de Redes de Computadores
El Socket (2)
 Si todo sale bien, el servidor acepta la conexión. Con la
aceptación el servidor recibe un nuevo socket asociado a un port
nuevo (cuyo número no necesariamente conoce). El port original
(por donde escuchaba) queda libre para seguir escuchando otras
peticiones.
Se crea un link de comunicaciones bi-direccional entre el
servidor y el cliente. En el servidor, el extremo está asociado al
nuevo port.
En el cliente, si la conexión fue aceptada por un servidor, se crea
un socket asociado a un port (cuyo nombre no es necesariamente
conocido).
El cliente y el servidor se comunican escribiendo datos en o
leyendo datos desde el socket.
13
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Módulo ECI - 11: Fundamentos de Redes de Computadores
Sockets en el Cliente en Java (1)
 Cuando un programa cliente (llamador) en java desea conectarse con
un servidor (en cualquier lenguaje!) debe saber primero dónde esta
corriendo (host) y en que port está escuchando.
 El host lo puede dar como dirección (Ej: “192.123.355.211”) o como
nombre (ej: achawall.dcc.uchile.cl).
 Sabiendo esto puede interntar un “rendezvous” con el servidor. Esto se
hace intentando crear una conexión TCP y recogiendo el extremo del
circuito virtual en un socket
Socket llamando;
llamando = new Socket(host,5555);
 Esto queda esperando hasta que se realiza la conexión en el servidor y
se crea el socket, que es el extremo local de la conexión. El otro
extremo (servidor) NO está asociado al port 5555. Ese se usó solamente
para oir.
 Esto puede ocacionar un error si el host no existe, no está alcanzable
por la red o no hay ningún servidor oyendo por ese socket. Para eso hay
naturalmente un timeout.
 Conviene por esto siempre ejecutarlo en un bloque try con el catch 14
“agarrando
unade excepción
“UnknownHostException”
Universidad
Chile - Tupper 2007, Santiago
- Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Módulo ECI - 11: Fundamentos de Redes de Computadores
Sockets en el Cliente en Java (2)
Si todo sale bien con la conexión, podemos abrir un canal de
lectura y/u otro de escritura para poder recibir y/o enviar datos.
PrintWriter out = new PrintWriter(llamando.getOutputStream(), true);
BufferedReader In = new BufferedReader(new
InputStreamReader(llamando.getInputStream()));
getInputStream y getOutputStream abren flujos de datos
orientados a la lectura y escritura de bytes por la línea.
Printwriter y BufferedReader son “filtros” que permiten leer y
escribir strings.
out.print(“hola pelao”); out.println(“como estas”);
String linea = in.readLine();
El servidor debe enviar una marca de fin de línea (ascii) !!!!
Veamos un cliente que se conecta al servidor echo de una
máquina Unix. Modifíquelo para que se conecte a otros.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
15
Módulo ECI - 11: Fundamentos de Redes de Computadores
A Client for the date server
The date server just waits until someone tries a
rendezvous and answers with the current date of the
server. Then the server breaks the communication (3).
This means the client must try rendezvous (1) and
then read the response of the server (2).
2
3
Date server
13
1
DateClient
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Client
16
Módulo ECI - 11: Fundamentos de Redes de Computadores
A Client for the echo server
The echo server waits until someone makes a
rendezvous. The it reads “line-by-line” what the client
sends and answers with the same. The connection must
be broken by the client.
2
3
Echo server
7
1
EchoClient
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Client
17
Módulo ECI - 11: Fundamentos de Redes de Computadores
Programas Cliente en Java
Veamos un cliente que se conecta al servidor echo de una
máquina Unix. (ver EchoClient.java)
¿Cómo habría que modificarlo para que se conecte con el
servidor date (13) y muestre la fecha? (ver DateClient.java)
¿Cómo habría que modificarlo para que se conecte con el
servidor www (80) y muestre el archivo pedido?
¿Cómo habría que modificarlo para que se conecte con el
servidor finger (79) y muestre la consulta pedida?
¿Cómo habría que modificarlo para que se conecte con el
servidor ftp ( ???) y realice el diálogo?
¿Cómo se vería un cliente genérico que sirva de marco para todo
esto?
18
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Módulo ECI - 11: Fundamentos de Redes de Computadores
Programas Cliente en Java
import java.io.*;
import java.net.*;
public class Cliente {
public static void main(String[] args) throws IOException {
Socket echoSocket = null; PrintWriter out = null; BufferedReader in = null;
if (args.length != 2)
System.out.println(“Use: java Cliente <host> <port> <protocolo>)”);
int nport = Integer.parseInt(args[1]); int protocolo = Integer.parseInt(args[2]);
try {
echoSocket = new Socket(args[0],nport);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new
InputStreamReader(echoSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Don't know about host: "+ args[0]);
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to: "+args[0]);
System.exit(1);
}
protocolo(in,out, protocolo);
}
}
19
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Módulo ECI - 11: Fundamentos de Redes de Computadores
Sockets en el Servidor (1)
El servidor debe empezar por crear un socket servidor y
asociarlo a un por desde donde escucuchará peticiones de
posibles clientes que quieran conectarse.
ServerSocket escuchando;
escuchando = new ServerSocket(5555);
Con esto sólo ha creado el socket pero no está escuchando. Para
poder empezar a escuchar debe hacer:
Socket = escuchando.accept();
 Esta instrucción hace varias cosas:
accept bloquea la ejecución del programa hasta que recibe una
petición de un cliente por ese port (recordemos: llamando = new ....)
cuando llega un requerimiento de conexión, se crea un circuito
virtual entre ambos computadores. El cliente recibe un extremo de
esa conexión y el servidor la otra. Este otro extremo se asocia a otro
socket que el sistemqa escoge convenientemente.
20
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Módulo ECI - 11: Fundamentos de Redes de Computadores
Sockets en el Servidor (2)
El servidor puede ejecutar los mismos métodos sobre su socket
para abrir un flujo de entrada y salida de datos.
Aquí es importante el PROTOCOLO DE LA COMUNICACIÓN
que no es más que las reglas que deben seguir servidor y cliente
para comunicarse. Es muy importante que ambos tengan claros
cuándo y qué se puede/debe escribir y/o leer. Ej. Cual es el
protocolo de echo ?, de Date ? de telnet ?
Existen algunos otros métodos que se pueden ejecutar sobre un
objeto de tipo Socket (notar que tante el servidor como el cliente
estan con un socket de la misma clase después de haber establecido
la comunicación)
InteAddress getInetAddress()
int getPort()
InetAddress getLocalAddress()
int getLocalPort()
void setSoTimeout(int timeout) int getSoTimeoute()
void setSoLinger(Boolean on, int val) int getSoLinger() (el delay
despues de un close())
close()
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
21
Módulo ECI - 11: Fundamentos de Redes de Computadores
A Server for the Date
We will program now a date server a computer which has not
one (for example, a MS-Windows computer)
3 answer with the date in another socket
4 close the connection
Date server
Client
13
1 Create the server socket
2 start listening
DateServer
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
DateClient222
Let’s see another example of simple client-server
communication with TCP
Módulo ECI - 11: Fundamentos de Redes de Computadores
Open server socket port =4444
While(true) {
accept call
open reading from socket
while (true) {
read line from socket
if (line.equals(“bye”))
break;
write line to screen
} //en of the call
}
TalkServer
dos
s=new Socket(args[0],4444)
open writing to socket
while (true) {
read line from keyboard
write to socket
if (line.equals(“bye”))
break;
}
TalkClient
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
23
Módulo ECI - 11: Fundamentos de Redes de Computadores
Programemos algo bien simple
• El TalkServer espera que alguien quiera comunicarse
• El TalkClient pide un host y se comunica con el
• Desde ese momento lo que escriba el cliente será
• Transmitido al servidor y éste lo
Bla bla from keyboard
Bla bla
Talk client
Talk Server
24
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Módulo ECI - 11: Fundamentos de Redes de Computadores
Sockets: Transmisión de Archivos (1)
Hagamos ahora un para de programas que se transmitan un
archivo.
El que recibe el archivo se pone a escuchar para que le
manden un archivo (es el servidor !!!)
El enviador del archivo sabe donde está escuchando el
recibidor para recibir la petición de transmisión de
archivos.
El traspaso se hace a nivel de bytes para poder traspasar
cualquier tipo de archivo.
25
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Módulo ECI - 11: Fundamentos de Redes de Computadores
Una situación de transmisión de archivos
2) El enviador trata de
contactar al recibidor
1) El recibidor queda escuchando
a ver si alguien quiere mandarle algo
4) Send bytes
5) Write bytes in file
3) Read bytes from file
Repeat 3,4,5 until
all the file is transmitted
Ver programas ArchEnviador.java ArchRecibidor.java
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
26
Módulo ECI - 11: Fundamentos de Redes de Computadores
Sockets: Transmisión de Archivos (2)
Hagamos ahora un par de programas algo más inteligentes:
El Servidor queda esperando una petición en un port
Cuando llega una petición lee el nombre del archivo a
entregar
Abre el archivo y lo transmite por el socket.
El cliente trata de conectarse con el servidor en el port
acordado
una vez que resulta envía el nombre del archivo que
quiere recuperar
Lee hasta que encuentra un fin de archivo y lo va
guardando en un archivo del mismo nombre que el original.
27
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
Módulo ECI - 11: Fundamentos de Redes de Computadores
Un servidor de archivos más inteligente
1) Filename from keyboard
2) Request file
4) Send file
5) Write file
3) Read File
Repeat 3,4,5 until
all the file is transmitted
Ver programas ArchServer.java ArchCliente.java
28
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl