Arquitecturas cliente/servidor



Documentos relacionados
Desarrollo de Aplicaciones Distribuidas. Sockets. Daniel Avellaneda

EJEMPLOS PROGRAMACIÓN SOCKET - JAVA

1.- FUNDAMENTOS FUNCIONAMIENTO GENÉRICO JAVA SOCKETS Creación de Streams de Entrada...7

Sockets en Java. Prof. Wílmer Pereira Universidad Simón Bolívar

COMUNICACIÓN ENTRE PROCESOS SOCKETS

PROGRAMACION DISTRIBUIDA

Federico Peinado

Introducción de Sockets en C.

1 SOCKETS EN JAVA. Sistemas Distribuidos::Sockets en Java EUI-SG/INFOR.UVA.ES 1

Universidad de Cantabria

Comunicación entre Procesos y Sockets

Sockets. Introducción. Las redes de computadoras permiten al usuario. Curso Propedéutico Maestría en Ciencias de la Computación BUAP

UNIVERSIDAD POLITÉCNICA DE PACHUCA SOCKETS EN JAVA

Capítulo 5. Programación de aplicaciones de red

Cliente/Servidor en Java

UNIVERSIDADE DA CORUÑA Departamento de Tecnoloxías da Información e as Comunicacións LABORATORIO DE RC: TUTORIAL DE SOCKETS EN JAVA

Sockets. Sockets. 1 Introducción

PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA

UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA. Daniel Díaz Sánchez

Sockets en Java. La Creatividad proviene de un conflicto de ideas. Uso de Sockets

CLASE SOCKET. 1. Crear un nuevo socket usando un constructor de la clase. 2. El socket trata de conectarse al host remoto.

Sockets. Los sockets son un mecanismo de comunicación entre procesos que se utiliza en Internet.

Examen de Redes - ETSIA 9 de septiembre - Primer Parcial

ARQUITECTURAS CLIENTE/SERVIDOR

TELEPROCESO Y SISTEMAS DISTRIBUIDOS

Tema II. Sockets. Desarrollo de Aplicaciones para Internet Curso Miguel Reboiro Jato

EL MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP DE INTERNET

Justamente, una de las formas de crear un objeto de la clase URL permite especificar también el puerto:

Sistemas Distribuidos ITInformática (UVA) César Llamas Bello - Febrero 2003

Tema 3: COMUNICACIÓN ENTRE PROCESOS

Arquitecturas cliente/servidor

Las clases Java Socket y ServerSocket

Nivel de Transporte en Internet

SOCKET S. Alberto Castro Rojas

Programación para redes con Java

Aplicaciones Cliente/Servidor en Gambas Prof: Mileti, P.

1. Visión general de RMI

Java: comunicación en Internet. Modem. Satelite UMTS W-LAN. Láser. Fibra óptica. Conceptos básicos

Direcciones IP y puertos

Capítulo 2: Capa Aplicación - IV

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

Luego lleve el cliente a otra máquina y ejecute desde ahí usando el nombre de la máquina del servidor.

Ficheros de acceso aleatorio

Redes (IS20) Ingeniería Técnica en Informática de Sistemas. CAPÍTULO 8: El nivel de transporte en Internet

Programación Orientada a Objetos. Tema 7: Persistencia

Práctica GESTIÓN Y UTILIZACIÓN DE REDES LOCALES. Curso 2001/2002. TCP/IP: protocolo TCP

Problemas de Redes de Computadores. Conjunto de problemas 1

Comunicación entre procesos: sockets udp. Jorge Iván Meza Martínez

Maestría en Ciencias de la Computación

Lab 01: Programación de Sockets en TCP

Introducción a la programación con sockets en C

Tema 4.1: - TRANSPORTE-

DISEÑO DE UNA ARQUITECTURA CLIENTE/SERVIDOR MEDIANTE OBJETOS DISTRIBUIDOS EN JAVA

Estructuras y funciones de programación de sockets.

Sockets (UDP) Tema 2.- Nivel de aplicación en Internet

Práctica 5: Servidor web concurrente en Java

Tutorial BMS Server Studio UDP

Modulo 1 El lenguaje Java

sockets Flujo (SOCK_STREAM) Comunicación bidireccional Confiable (entrega garantizada) Información ordenada en el destino Datagrama (SOCK_DGRAM)

Sockets (TCP) Tema 2.- Nivel de aplicación en Internet

PROGRAMACIÓN CONCURRENTE Y DISTRIBUIDA. VI.1: Socket Java

Multienhebrado en Java Un toque de sincronización Transporte en Java Ejemplo conjunto

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

LABORATORIO DE RC PRÁCTICA 2: IMPLEMENTACIÓN DE UN CLIENTE Y SERVIDOR DE

Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J.

Comunicacion en Java. Alejandro Escobar

Práctica 2: Java Remote Method Invocation (RMI)

Laboratorio de Redes de Comunicaciones Programación con Sockets en Java

Práctica 3 de Redes de Área Local Cliente y Servidor de ficheros concurrente

FACULTAD DE INGENIERÍA

Programación Orientada a Objetos II. La Plataforma JDBC

Práctica 3: Introducción a los sockets en Java

Desarrollar, usando Java, un cliente básico del protocolo web que permita enviar una solicitud HTTP a un servidor web y procesar la respuesta.

Examen de Redes - Primer Parcial - ETSIA 26 de Enero de 2006

USANDO SERVLETS EN UN SERVIDOR WEB RESIN

Problemas de Redes de Computadores. Ingeniería Técnica en Informática de Gestión Conjunto de problemas 1

Mecanismos IPC: sockets

Migrando aplicaciones a IPv6

MANUAL TÉCNICO DEL PROXY UTN

Tipos primitivos y clases de interés

Juan de Dios Murillo Morera Santiago Caamaño Polini INTRODUCCIÓN

Entrada y Salida con Java

Transcripción:

Arquitecturas cliente/servidor Creación de Sockets Cliente Servidor

Creación de Sockets Cliente/Servidor Sockets en TCP Sockets en UDP Definición de DAEMON Concepto de Hilos

Qué es un socket? Un socket es un punto final de un enlace de comunicación de dos vías entre dos programas que se ejecutan a través de la red. El cliente y el servidor deben ponerse de acuerdo sobre el protocolo que utilizarán.

Familias de sockets Es una constante de la API de Berkeley que indica que tipo de Protocolo se va utilizar durante una conexión Familia AF_UNIX: Usa protocolos internos de Unix. Familia AF_INET: Usa protocolos de Internet, como el TCP (Transmisión Control Protocol). Familia AF_CCITT: Norma X.25 de CCITT. Familia AF_NS: Protocolos NS de XEROX. Familia AF_SNA: Protocolos IBM SNA. Entre otras.. También se puede encontrar como PF_* (Protocol Family)

Referencia API de sockets en C Circuito virtual: Mediante la búsqueda de enlaces libres, se establece un circuito virtual. Conexión permanente hasta el final de la comunicación. SOCK_STREAM Datagramas: no trabajan con circuitos permanentes. La transmisión se realiza a nivel de paquetes. SOCK_DGRAM

Sockets TCP

Orientado a Conexión Establece un camino virtual entre servidor y cliente, fiable, sin pérdidas de información ni duplicados, la información llega en el mismo orden que se envía. El cliente abre una sesión en el servidor y este guarda un estado del cliente. El cliente utiliza la clase Socket El servidor utiliza la clase ServerSocket Estas clases se encuentran definidas en el paquete java.net

Constructores: Clase Socket public Socket () public Socket (InetAddress address, int port) public Socket (String host, int port) public Socket (InetAddress address, int port, InetAddress localaddr, int localport) public Socket (String host, int portt, InetAddress localaddr, int localport) address / localaddr Dirección IP de la máquina remota /local. port / localport Puerto de la máquina remota / local. host Nombre de la máquina remota Nota: En el caso del primer constructor se crea un objeto Socket sin conexión.

Servicios de la clase Socket public InetAddress getinetaddress() Devuelve la dirección IP de la máquina en la que estamos conectados. public int getport() Devuelve el puerto de la máquina remota. public void close() Cierra el canal de comunicación. public InputStream getinputstream() Devuelve el canal de lectura del socket. public OutputStream getoutputstream() Devuelve el canal de escritura del socket. Ademas JAVA proporciona dos llamadas para saber la @IP y puerto local (getlocaladdress() y getlocalport())

Constructores: Clase ServerSocket public ServerSocket (int port) public ServerSocket (int port, int backlog) public ServerSocket (int port, int backlog, InetAddress bindaddr) port puerto de escucha de la máquina servidora. backlog tamaño de la cola de espera, en el primero es 50. bindaddr dirección IP local que se hará pública mediante el bind. El constructor ServerSocket se encarga de hacer el bind y el listen.

Servicios de la clase ServerSocket public Socket accept() Devuelve el socket resultado de aceptar una petición, para llevar a cabo la comunicación con el cliente. public void close() Cierra el canal de comunicación. public InetAddress getinetaddress() Devuelve la dirección IP de la máquina local. public int getlocalport() Devuelve el puerto de la máquina local

Modelo cliente/servidor Modelo general SERVIDOR CLIENTE ServerSocket(port#) Socket(host,port#) accept()...... InputStream OutputStream OutputStream InputStream...... close() close()

Creación de objetos Conexión servidor ServerSocket miservicio; try{ miservicio = new ServerSocket(numeroPuerto); } catch ( IOException e ) { System.out.println ( e ); }... Socket socketservicio = null; try{ socketservicio = miservicio.accept(); } catch ( IOException e ) { System.out.println ( e ); }

Creación de objetos (2) Conexión cliente Socket micliente; try{ micliente = new Socket( maquina,numeropuerto); } catch ( IOException e ) { System.out.println ( e ); }

Creación de Objetos Stream Creación Streams de entrada A pesar de haber creado el socket, el programa no puede enviar o recibir datos a traves de esta clase. Se utilizan los InputStream y el OutputStream DataInputStream entrada; (--- CLIENTE ---) try { entrada = new DataInputStream( micliente.getinputstream() ); } catch ( IOException e ) { System.out.println ( e ); } DataInputStream entrada; (--- SERVIDOR ---) try { entrada = new DataInputStream(socketServicio.getInputStream() ); } catch ( IOException e ) { System.out.println ( e ); }

Creación de Objetos Stream Creación Streams salida PrintStream salida; (--- CLIENTE y SERVIDOR ---) try { salida = new PrintStream( micliente.getoutputstream() ); } catch ( IOException e ) { System.out.println ( e ); } DataOutputStream salida; (--- CLIENTE y SERVIDOR ---) try { salida = new DataOutputStream(miCliente.getOutputStream() ); } catch ( IOException e ) { System.out.println ( e ); }

InputStream & Output Stream

Comunicación entre cliente/servidor Para la transmisión de datos entre cliente y servidor se utilizan las clases DataInputStream (recibir datos) y DataOutputStream (enviar datos) Estas clases disponen de métodos para leer y escribir datos en el socket: read/write Boolean read/write Char read/write Double, read/write Float, read/write Int, read/write Long, read/write Short read/writeutf (leer/escribir cadenas de caracteres) Para envíar los datos se utiliza el método flush() de la clase DataOutputStream.

Interacción cliente/servidor: TCP Servidor (corriendo en IP hostid) create socket, port=x, for incoming request: serversocket = ServerSocket() wait for incoming connection request connectionsocket = serversocket.accept() read request from connectionsocket write reply to connectionsocket close connectionsocket TCP connection setup Cliente create socket, connect to hostid, port=x clientsocket = Socket() send request using clientsocket read reply from clientsocket close clientsocket

import java.io.*; import java.net.*; public class SimpleEchoServer{ public static void main(string[] args) { try{ ServerSocket s = new ServerSocket(9999); String str; while (true){ Socket c = s.accept(); InputStream i = c.getinputstream(); OutputStream o = c.getoutputstream(); do{ byte[] line = new byte[100]; i.read(line); o.write(line); str = new String(line); }while (!str.trim().equals("bye") ); c.close(); } }catch (Exception err){ System.err.println(err); } } }

import java.net.*; import java.io.*; public class SimpleEchoClient{ public static void main(string[] args) { try{ Socket s = new Socket("127.0.0.1", 9999); InputStream i = s.getinputstream(); OutputStream o = s.getoutputstream(); String str; do{ byte[] line = new byte[100]; System.in.read(line); o.write(line); i.read(line); str = new String(line); System.out.println( local: +str.trim()); }while (!str.trim().equals("bye") ); } s.close(); }catch (Exception err){ System.err.println(err); }

Ciclo de vida de un socket TCP Ciclo de vida del servidor TCP Ciclo de vida del cliente TCP

Sockets UDP

No orientado a conexión Envío de datagramas de tamaño fijo. No es fiable, puede haber pérdidas de información y duplicados, y la información puede llegar en distinto orden del que se envía. No se guarda ningún estado del cliente en el servidor, por ello, es más tolerante a fallos del sistema. Tanto el cliente como el servidor utilizan la clase DatagramSocket. Se encuentran en el paquete java.net

Clase Datagram Socket Constructores: public DatagramSocket () public DatagramSocket (int port) public DatagramSocket (int port, InetAddress laddr) port puerto de la máquina. laddr dirección IP local que se hará pública mediante el bind. El constructor DatagramSocket se encarga de hacer el bind. El primer constructor elige un puerto libre.

DatagramSocket Un objeto java.net.datagramsocket es un conector a través del cual enviamos y recibimos paquetes UDP. Si se quiere utilizar un DatagramSocket para recibir paquetes se necesita especificar el puerto. Al contrario, si es para enviar paquetes, no es necesario especificar este puerto.

Ejemplo DatagramSocket ds1 = new DatagramSocket(123); /* Aquí usamos este DatagramSocket para recibir datos... */ /*... */ /* Hemos terminado, cerramos el socket */ ds1.close(); DatagramSocket ds2 = new DatagramSocket(); /* Aquí lo usamos para transmitir datos... */ /*... */ /* Hemos terminado, cerramos el socket */ ds2.close();

Servicios de la clase DatagramSocket public void connect(inetaddress address, int port) Conecta el socket a la máquina remota con la @IP address y puerto port. public void close() Cierra el canal de comunicación. public InetAddress getinetaddress() Devuelve la @IP de la máquina remota. public int getport() Devuelve el puerto de la máquina remota. También hay dos llamadas para saber la @IP y puerto local (getlocaladdress() y getlocalport()).

DatagramSocket public void send ( DatagramPacket p): Envía un datagrama a la máquina remota, por el socket asociado. public void receive ( DatagramPacket p): Recibe un datagrama de otra máquina, por el socket asociado.

La clase DatagramPacket Esta clase representa a los paquetes de datos que vamos a recibir o transmitir a través de los objetos DatagramSocket. Estos paquetes constan de: cabecera dirección de origen, destino del paquete, el puerto, longitud del paquete, checksum, etc. cuerpo contenido real del paquete. cabecera cuerpo En Java accedemos a las distintas partes de un datagrama mediante los métodos de la clase java.net.datagrampacket.

DatagramPacket La forma de construir datagramas es distinta dependiendo de si queremos enviar o recibir datos. En caso de que se quiera recibir, especificar: arreglo de bytes donde almacenar los datos longitud máxima que queremos recibir. Si queremos transmitir, especificar: arreglo de bytes a enviar longitud máxima datos a enviar dirección y puerto destino del datagrama.

Clase DatagramPacket Constructores public DatagramPacket (byte[] buff, int length) Construye un DatagramPacket para recibir paquetes en el buffer buff, de longitud length public DatagramPacket (byte[] buff, int length, InetAddress address, int port) Construye un DatagramPacket para envíar paquetes con datos del buffer buff, de longitud length, a la @IP address y el puerto port. Servicios: Para la actualización y consulta de los diferentes campos de un DatagramPacket disponemos de los siguientes métodos: set/getaddress, set/getdata, set/getlength, set/getport

Enviar datos int tam = 1024; InetAddress direcc =...; byte[] datos = new byte[tam]; int puerto = 543; for (int n=0;n<tam;n++){ /* Generamos los datos que vamos a enviar */ datos[n] =...; } DatagramSocket ds = new DatagramSocket(); DatagramPacket dp = new DatagramPacket(datos, tam, direcc, puerto); ds.send(dp); /* Aquí enviamos el paquete */

Recibir datos int tam = 1024; byte[] buffer = new byte[tam]; int puerto = 987; DatagramSocket ds = new DatagramSocket(puerto); DatagramPacket dp = new DatagramPacket(buffer,tam); ds.receive(dp); /*Ahora tenemos en buffer la información que nos interesa*/

Interacción cliente/servidor: UDP Servidor (corriendo en host) Cliente create socket, port=x, for incoming request: serversocket = DatagramSocket() read request from serversocket create socket, clientsocket = DatagramSocket() Create, address (hostid, port=x, send datagram request using clientsocket write reply to serversocket specifying client host address, port number read reply from clientsocket close clientsocket

Clase InetAddress La forma de crear un objeto InetAddress es mediante el método estático: InetAddress.getByName(String host) Recibe un nombre de host en notación alfanumérica (por ejemplo "www.etsit.upv.es" o "209.41.57.70" ) devuelve un objeto InetAddress con esa dirección. Si la dirección no existe o no puede ser encontrada, este método lanza una excepción UnknownHostException.