Comunicacion Cliente Servidor Sockets

November 28, 2017 | Author: Stepheny Svee | Category: Network Socket, Computer Engineering, Digital & Social Media, Digital Technology, Networking Standards
Share Embed Donate


Short Description

Download Comunicacion Cliente Servidor Sockets...

Description

Comunicacion Cliente Servidor Sockets Unidad II Comunicaciones en los Sistemas Operativos Distribuidos 2.1. Comunicación 2.1.1. Comunicación con los clientes-Servidor (Socket) Origen de los socket tuvo lugar en una variante del sistema operativo Unix conocida como BSD Unix. En la universidad de Berkeley, en los inicios del Internet, pronto se hizo evidente que los programadores necesitarían un medio sencillo y eficaz para escribir programas capaces de intercomunicarse entre sí. Esta necesidad dio origen a la primera especificación e implementación de sockets. Cliente-Servidor es el modelo que actualmente domina el ámbito de comunicación, ya que descentraliza los procesos y los recursos. Es un Sistema donde el cliente es una aplicación, en un equipo, que solicita un determinado servicio y existe un software, en otro equipo, que lo proporciona. Los servicios pueden ser; a)Ejecución de un programa. b)Acceso a una Base de Datos. c)Acceso a un dispositivo de hardware. Solo se requiere un medio físico de comunicación entre las maquinas y dependerá de ala naturaleza de este medio la vialidad del sistema. Definición de Socket: designa un concepto abstracto por el cual dos programas (posiblemente situados en

computadoras distintas) pueden intercambiarse cualquier flujo de datos, generalmente de manera fiable y ordenada. Los sockets proporcionan una comunicación de dos vías, punto a punto entre dos procesos. Los sockets son muy versátiles y son un componente básico de comunicación entre interprocesos e intersistemas. Un socket es un punto final de comunicación al cual se puede asociar un nombre. Para lograr tener un socket es necesario que se cumplan ciertos requisitos 1.Que un programa sea capaz de localizar al otro. 2.Que ambos programas sean capaces de intercambiarse información. Por lo que son necesarios tres recursos que originan el concepto de socket a)Un protocolo de comunicaciones, que permite el intercambio de octetos. b)Una dirección del Protocolo de Red (Dirección IP, si se utiliza el Protocolo TCP/IP), que identifica una computadora. c)Un número de puerto, que identifica a un programa dentro de una computadora. Con un socket se logra implementar una arquitectura cliente-servidor. la comunicación es iniciada por uno de los programas (cliente). Mientras el segundo programa espera a que el otro inicie la comunicación (servidor). Un Socket es un archivo existente en el cliente y en el servidor. si un socket es un punto final de un puente de comunicaron de dos vías entre dos programas que se comunican a través de la red, ¿Cómo funciona?. Normalmente, un servidor funciona en una computadora específica usando un socket con un número de puerto especifico. El cliente conoce el

nombre de la maquina (hostname) o el IP, en la cual el servidor esta funcionando y el numero del puerto con el servidor esta conectado. Si el cliente lanza una demanda de conexión y el servidor acepta la conexión, este abre un socket en un puerto diferente, para que pueda continuar escuchando en el puerto original nuevas peticiones de conexión, mientras que atiende a las peticiones del cliente conectado. El cliente y el servidor pu8eden ahora comunicarse escribiendo o leyendo en sus respectivos sockets.

Los tipos de socket definen las propiedades de comunicación visibles para la aplicación. Los procesos se comunican solamente entre los sockets del mismo tipo. Existen cinco tipos de sockets. El Cliente actúa de la siguiente forma. 1)Establece una conexión con el servidor (Crea un socket con el servidor). 2)Mandar mensajes al servidor o Esperar un mensaje de él.(Consultas) 3)Esperar su respuesta o contestarle(existen casos en que este paso no es necesario). 4)Repetir los pasos 2 y 3 mientras sea necesario. 5)Cerrar la conexión con el servidor. El servidor actúa así. 1)Inicializa un puerto de comunicación, en espera de clientes que intenten conectarse a él (Crea un serverSocket). 2)Una vez que se conecta alguien, crea un hilo de ejecución para este usuario mientras que el thread principal vuelve al paso 1. Esto comunmente se hace para que el servidor puede atender a varios clientes al mismo tiempo.

3)Se comunica con el cliente mediante el socket creado entre el cliente y él. 4)Espera que el cliente se vaya o lo bota el mismo servidor (Cierrra el socket entre ellos) y elimina el thread de comunicación entre ellos. Las propiedades de un socket dependen de las características del protocolo en el que se implementan. El protocolo más utilizado es TCP, aunque también es posible utilizar UDP o IPX. Gracias al protocolo TCP, los sockets tienen las siguientes propiedades: I.Orientado a conexión. Se garantiza la transmisión de todos los octetos sin errores ni omisiones. II.Se garantiza que todo octeto llegará a su destino en el mismo orden en que se ha transmitido. Los tipos de socket definen las propiedades de comunicación visibles para la aplicación. Los procesos se comunican solamente entre los sockets del mismo tipo. Existen tres tipos básicos de sockets. Socket de flujo : da un flujo de datos de dos vías, confiable, y sin duplicados sin límites de grabación. El flujo opera en forma parecida a una conversación telefónica. El tipo del socket es SOCK_STREAM, el cual en el dominio de Internet usa TCP (Transmission Control Protocol). Socket de datagrama soporta un flujo de mensajes de dos vías. En un socket de datagrama podría recibir mensajes en diferente orden de la secuencia de la cual los mensajes fueron envíados. Los límites de grabación en los datos son preservados. Los sockets de datagrama operan parecidos a pasar cartas hacia adelante y hacia atrás en el correo. El tipo de socket es

SOCK_DGRAM, el cual en el dominio de internet usa UDP (User Datagram Protocol). Socket de paquete secuencial da una conexión de dos vías, secuencial y confiable para datagramas de una longitud fija máxima. El tipo de socket es SOCK_SEQPACKET. No hay protocolo en Internet implementado para este tipo de socket. Implementando un socket en java En un programa Cliente-Servidor un socket nos ayuda a representar las conexiones entre un programa cliente y uno servidor. En el lado del cliente se utiliza la clase Socket y en el del servidor el Server Socket para representar dichas conexiones. POGRAMA CLIENTE El programa cliente se conecta a un servidor indicando el nombre de la máquina y el número puerto (tipo de servicio que solicita) en el que el servidor está instalado. Una vez conectado, lee una cadena del servidor y la escribe en la pantalla: import java.io.*; import java.net.*; class Cliente { static final String HOST = “localhost”; static final int PUERTO=5000; public Cliente( ) { try { Socket skCliente = new Socket( HOST , Puerto ); Input Stream aux = skCliente.getInputStream(); Data Input Stream? flujo = new Data Input Stream( aux ); System.out.println( flujo.readUTF() );

skCliente.close(); } catch( Exception e ) { System.out.println( e.getMessage() ); } } public static void main( String[] arg ) { new Cliente(); } }

En primer lugar se crea el Socket denominado skSocket, al que se le especifican el nombre de host (HOST) y el número de puerto (PORT) en este ejemplo constantes. Luego se asocia el flujo de datos de dicho Socket (obtenido mediante getInputStream), que es asociado a un flujo (flujo) Data Input Streamde? lectura secuencial. De dicho flujo capturamos una cadena ( readUTF()), y la imprimimos por pantalla (System.out). El Socket se cierra, una vez finalizadas las operaciones, mediante el método close(). Debe observarse que se realiza una gestión de excepción para capturar los posibles fallos tanto de los flujos de datos como del Socket. PROGRAMA SERVIDOR El programa servidor se instala en un puerto determinado, a la espera de conexiones, a las que tratará mediante un segundo SOCKET. Cada vez que se presenta un cliente, le saluda con una frase “Hola cliente N”. Este servidor sólo atenderá hasta tres clientes, y después finalizará su ejecución, pero es habitual utilizar ciclos infinitos (while(true)) en los servidores, para que atiendan llamadas continuamente.Tras atender cuatro clientes, el servidor deja de ofrecer su servicio:

import java.io.* ; import java.net.* ; class Servidor { static final int PUERTO=5000; public Servidor( ) { try { Server Socket skServidor = new Server Socket( PUERTO ); System.out.println(“Escucho el puerto “ + PUERTO ); for ( int numCli = 0; numCli < 3; numCli++; ) { Socket skCliente = skServidor.accept(); // Crea objeto System.out.println(“Sirvo al cliente “ + numCli); Output Stream aux = skCliente.getOutputStream(); Data Output Stream flujo= new Data Output Stream( aux ); flujo.writeUTF( “Hola cliente “ + numCli ); skCliente.close(); } // Cierra while System.out.println(“Demasiados clientes por hoy”); } catch( Exception e ) { System.out.println( e.getMessage() ); } } public static void main( String[] arg ) { new Servidor(); }

} Utiliza un objeto de la clase Server Socket(skServer), que sirve para esperar las conexiones en un puerto determinado (PUERTO), y un objeto de la clase Socket (skCliente) que sirve para gestionar una conexión con cada cliente. Mediante un ciclo for y la variable numCli se restringe el número de clientes a tres, con lo que cada vez que en el puerto de este servidor aparezca un cliente, se atiende y se incrementa el contador.

Para atender a los clientes se utiliza la primitiva accept() de la clase Server Socket, que es una rutina que crea un nuevo Socket (skCliente) para atender a un cliente que se ha conectado a ese servidor. Se asocia al socket creado (skCliente) un flujo (flujo) de salida Data Output Stream de escritura secuencial, en el que se escribe el mensaje a enviar al cliente. El tratamiento de las excepciones es muy reducido en nuestro ejemplo, tan solo se captura e imprime el mensaje que incluye la excepción mediante getMessage(). 100% ITZ = instituto tecnologico de zacatepec Buscar

EDIT

www.MiTecnologico.com

Politica de Privacidad _

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF