Programando Clientes TCP Postítulo 2004. La Clase InetAddress Una dirección IP es la dirección absoluta de un computador cualquiera en toda la internet.

Slides:



Advertisements
Presentaciones similares
Curso de Java Java – Redes Rogelio Ferreira Escutia.
Advertisements

Nau Gran dHivern Intr. a la creación y gestión de páginas web Introducción a la web.
Java nos ofrece System.out para escribir en pantalla, pero también tenemos System.in para leer. System.in es un objeto de una clase de java que se llama.
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Archivos de Texto. Introducción Los archivos son una secuencia de bits que se guarda en el disco duro. La ventaja de utilizar archivos es que los datos.
EXCEPCIONES UNIDAD 5.
Programación Interactiva Aplicaciones Cliente-Servidor
CGI I La mayor parte de los elementos HTML de que disponemos permite al visitante visualizar los contenidos de un sitio, pero no interactuar con él. Dicho.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Sockets y Threads en JAVA
Telnet y SSH Integrantes: Carlos Parra José Isabel
SOCKETS INTRODUCCIÓN DEFINICIÓN TIPOS DE SOCKETS USO DE SOCKETS.
Capitulo 4 Excepciones.
Informática II Prof. Dr. Gustavo Patiño MJ
UNIVERSIDAD LATINA (UNILA)
RMI (Remote Method Invocation)
Servidor de Batalla Naval.
Qué pasa cuando varios clientes tratan de conectarse al mismo teimpo a un servidor Una forma es ir atendiéndolos de a uno en un ciclo: como en el programa.
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.
Excepciones y archivos Info 033. Exception El término Exception es la palabra corta para la frase "evento excepcional." Definition: Una excepción es un.
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors Christophe Fontano Julien Alagnou Socket.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
1 Streams en Java Agustín J. González ELO Generalidades Un Stream es simplemente una fuente o destino de bytes. Los streams más comunes son los.
Sockets en Java. Sockets ● Para programar aplicaciones en red en Java se utilizan los Sockets. ● Un socket permite establecer y manejar una conexión entre.
INTEGRANTES: MARTINEZ MISHELL MEDINA ENID MENENDEZ EVELYN INTEGRANTES: MARTINEZ MISHELL MEDINA ENID MENENDEZ EVELYN.
LISTAS DE CONTROL DE ACCESO (ACL)
Correo electrónico Internet
66.69 Criptografía y Seguridad Informática FIREWALL.
Cliente/Servidor ● Normalmente queremos algo más que conectarnos a un servidor ● El servidor nos va a dar un servicio ● Protocolo – Orden y tipo de datos.
USO DE EXCEPCIONES EN JAVA LSC. Natalia Rodríguez Castellón.
PROTOCOLO H T T P.
La Web y el HTTP. Antes del año 1990 Internet era usado por InvestigadoresAcadémicosEstudiantes Transferir archivos logearse remotamente Enviar/recibir.
1 Nivel aplicación Interacción Cliente Servidor Agustín J. González ELO309.
Sockets. / Los sockets (zócalos, referido a los enchufes de conexión de cables) son mecanismos de comunicación entre programas a través de una red TCP/IP.
1 Manejo de Excepciones y otros Agustín J. González ELO-329.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
1 Capítulo 21: Interacción Cliente Servidor ICD 327: Redes de Computadores Agustín J. González.
2: Capa Aplicación 1 Capa Aplicación: FTP ELO322: Redes de Computadores Agustín J. González Este material está basado en:  Material de apoyo al texto.
ELO3091 Interfaz de Socket Agustín J. González ELO309.
Sebastián Franco Henao
Java.
User Datagram Protocol UDP Juan Pablo Araneda Danilo Araya Z.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Universidad de Chile - Tupper 2007, Santiago - Fono: Fax: Módulo 9: Desarrollo de Aplicaciones.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
TELNET Jessica Prados Xavi Ferrer Raúl Ruiz David Candil
 Claudia Jordan Idrovo.  Son los puntos de enganche para cada conexión de red que realizamos. El protocolo TCP (el utilizado en internet) identifica.
Andres Marín L. Programación sockets en java.
LABORATORIO DE ESTRUCTURA DE COMPUTADORES II Desarrollo de aplicación Cliente-Servidor.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Tratamiento de excepciones
2: Capa Aplicación 1 Capa Aplicación: File Transfer Protocol ELO322: Redes de Computadores Agustín J. González Este material está basado en:  Material.
Tema 6 – Servicio de Correo Electrónico
File Transfer Protocol.
DIRECCIONES URL Las siglas URL corresponden a las palabras inglesas Universal Resource Locator, que en español viene a significar algo así como "Localizador.
UD 1: “Introducción a los servicios de red e Internet”
PROTOCOLO TCP Y UDP.
Protocolos de Transporte y Aplicación. – TCP y UDP
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2009.
Planificación Curso UNIDAD 1. INTRODUCCIÓN A LOS SERVICIOS EN RED UNIDAD 2. SERVICIOS DHCP UNIDAD 3. SERVICIOS DNS UNIDAD 4. SERVICIOS DE ACCESO REMOTO.
1 Introducción a las Comunicaciones en Red. import java.net.InetAddress; import java.net.UnknownHostException; public class PruebaSockets { public static.
DOCENTE: EMILIO ISMAEL BUSTAMANTE MONTES
Programando Clientes TCP
Transcripción de la presentación:

Programando Clientes TCP Postítulo 2004

La Clase InetAddress Una dirección 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 y Names.java

PURL URL = Uniform Resource Locator Se usa para conectar un programa Java con un servidor Web y leer (download) los recursos que ofrece. 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. En un objeto URL existen dos componentes principales: El descriptor de protocolo (ej. http) y el nombre del recurso (ej. 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 y 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.

La Clase URL (2) Existen varios constructores de URL: –URL unRUL = new URL(“ –unURL = new URL(“http”;” –unURL = new URL(“http”,” Al crear una variable URL se puede producir una excepción 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()

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 LeerURL { public static void main(String args[]) { try { URL miURL = new URL(“ 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) { System.out.pritnln(e);} } Ejercicio: programar esto pero permitir dar el http como parámetro

El Socket Un socket es un extremo de un link de comunicación entre dos programas que corren en una red. El socket está asociado (amarrado, bound) a un 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 computador 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 comunicarse con el servidor debe saber a qué 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.

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.

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: “ ”) o como nombre (ej: achawall.dcc.uchile.cl). Sabiendo esto puede intentar 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); Este 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 Ese se usó solamente para oir.

Sockets en el Cliente en Java (2) 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 capturando la excepción “UnknownHostException”.

Sockets en el Cliente en Java (3) 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”); 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.

El servidor de date espera que alguien se conecte con un rendezvous al port 13 (1) y luego responde enviando la fecha de sus sistema (2). Luego corta la comunicación (unilateralmente) (3). Date server 13 Client Un cliente para el servidor de date DateClient

El servidor de echo espera que alguien haga un rendezvous en el port 7 (1). Luego lee líneas de texto desde el cliente y responde enviando lo mismo que recibió. Esto lo sigue haciendo hasta que el cliente se desconecta. Un cliente para el servidor echo Echo server 7 Client EchoClient

El servidor finger espera un request y luego manda una serie de líneas y corta la comunicación Un cliente finger Finger server 7 Client 1 Finger [-l] [ 3 Finger

El protocolo está descrito en rfc 1939 (descripcion de protocolos de internet) Verlo en Un cliente pop para mail mail pop server 7 Client 1 cliente_pop \ 3 Cliente_pop

Programas Cliente en 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?

Un cliente genérico para 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 GClient ”); int nport = Integer.parseInt(args[1]); 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); } > }

Constructores para sockets Socket(String host, int port) el port debe estar en el rango 1-65,535 Socket(Inet Address host, int port) lo mismo pero con un objeto InetAddress como parámetro Socket(String host, int port, String localHost, int localport) Cada comunicación TCP consiste de un host y un port local y un host y un port remoto. Este constructor permite definir todos ellos. Especificar un host local sólo tiene sentido cuando el computador es multihomed (más de una dirección). Null = default address. Algunas veces es necesario definir el port local de un cliente por los firewalls. 0 = el sistema asigna uno dentro de los disponibles. Los números 0 a 1024 no deben usarse ya que los usan servicios “bien conocidos” como echo, telnet finger, ftp.

Más métodos socket en Java InetAddress getInetAddress() retorna la dirección IP del host remoto al cual el socket está conectado int getPort() retorna el número de port al que se conectó el socket en el otro computador InetAddress getLocalAddress() retorna la dirección IP del computador local int getLocalPort() retorna el número de port local, este normalmente no va explicitado en el programa cliente. void setSoTimeout(int timeout) pone un timeout para la operación de lectura (read) efectuada en este socket. 0 = no timeout, lo cual puede bloquear la operación en forma indefinida (default). Si la operación de lectura no es completada en ese tiempo se lanza una InterruptedIOException int getSoTimeout() retorna el timeout del socket

void setTcpNoDelay(boolean on) Habilita/deshabilita el uso del algoritmo de Nagel’s que hace más eficiente la operación de escritura retardando el envío de peqyueñas cantidades de información hasta que hay suficiente. CUIDADO, esto puede introducir demoras inaceptables para ciertas aplicaciones. boolean getTcpNoDelay() retorna verdadero o falso dependiendo si el algoritmo de Nagel está funcionando o no void setSoLinger(boolean on, int val) permite definir el time- out del “linger” del socket. Linger es el tiempo que la comunicación del socket permanece “abierta” una vez que el programa la ha cerrado recibiendo paquetes de confirmación que aún no habían llegado y evitar que otra aplicación use el port durante ese tiempo. int getSoLinger () returns the current linger setting or –1 if not set. void setSendBufferSize(int size) int getSendBufferSize() void setReceiveBufferSize(int size) int getReceiveBufferSize() Sockets.java Más métodos socket en Java

Exceptions originadas por Socket La mayoría de los constructores de sockets lanzan una exception, la cual debe ser atrapada en un bloque try-catch. La mayoría de las exceptions son subclases de la clase IOException BindException: el port local que se pidió usar no pudo ser usado. Tipicamente esto sucede cuando el port ya está en uso. ConnectException: la conexín fue rechazada porque no había ningún programa servidor escuchando en el host remoto. NoRouteToHostException: el host remoto no pudo ser alcanzado ya sea por que la comunicación falla o porque está detrás de una firewall UnknownHostException: la dirección dada no es válida (falla en el DNS Lookup)