You are on page 1of 8

Comunicacion Cliente Servidor Sockets

Unidad II Comunicaciones en los Sistemas Operativos Distribuidos 2.1. Comunicacin 2.1.1. Comunicacin 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 necesitaran un medio sencillo y eficaz para escribir programas capaces de intercomunicarse entre s. Esta necesidad dio origen a la primera especificacin e implementacin de sockets. Cliente-Servidor es el modelo que actualmente domina el mbito de comunicacin, ya que descentraliza los procesos y los recursos. Es un Sistema donde el cliente es una aplicacin, en un equipo, que solicita un determinado servicio y existe un software, en otro equipo, que lo proporciona. Los servicios pueden ser; a)Ejecucin de un programa. b)Acceso a una Base de Datos. c)Acceso a un dispositivo de hardware. Solo se requiere un medio fsico de comunicacin entre las maquinas y depender de ala naturaleza de este medio la vialidad del sistema. Definicin 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 comunicacin de dos vas, punto a punto entre dos procesos. Los sockets son muy verstiles y son un componente bsico de comunicacin entre interprocesos e intersistemas. Un socket es un punto final de comunicacin 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 informacin. 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 direccin del Protocolo de Red (Direccin IP, si se utiliza el Protocolo TCP/IP), que identifica una computadora. c)Un nmero de puerto, que identifica a un programa dentro de una computadora. Con un socket se logra implementar una arquitectura cliente-servidor. la comunicacin es iniciada por uno de los programas (cliente). Mientras el segundo programa espera a que el otro inicie la comunicacin (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 vas entre dos programas que se comunican a travs de la red, Cmo funciona?. Normalmente, un servidor funciona en una computadora especfica usando un socket con un nmero 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 conexin y el servidor acepta la conexin, este abre un socket en un puerto diferente, para que pueda continuar escuchando en el puerto original nuevas peticiones de conexin, 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 comunicacin visibles para la aplicacin. Los procesos se comunican solamente entre los sockets del mismo tipo. Existen cinco tipos de sockets. El Cliente acta de la siguiente forma. 1)Establece una conexin 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 conexin con el servidor. El servidor acta as. 1)Inicializa un puerto de comunicacin, en espera de clientes que intenten conectarse a l (Crea un serverSocket). 2)Una vez que se conecta alguien, crea un hilo de ejecucin 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 comunicacin entre ellos. Las propiedades de un socket dependen de las caractersticas del protocolo en el que se implementan. El protocolo ms utilizado es TCP, aunque tambin es posible utilizar UDP o IPX. Gracias al protocolo TCP, los sockets tienen las siguientes propiedades: I.Orientado a conexin. Se garantiza la transmisin 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 comunicacin visibles para la aplicacin. Los procesos se comunican solamente entre los sockets del mismo tipo. Existen tres tipos bsicos de sockets. Socket de flujo : da un flujo de datos de dos vas, confiable, y sin duplicados sin lmites de grabacin. El flujo opera en forma parecida a una conversacin telefnica. 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 vas. En un socket de datagrama podra recibir mensajes en diferente orden de la secuencia de la cual los mensajes fueron envados. Los lmites de grabacin en los datos son preservados. Los sockets de datagrama operan parecidos a pasar cartas hacia adelante y hacia atrs 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 conexin de dos vas, secuencial y confiable para datagramas de una longitud fija mxima. 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 mquina y el nmero 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 nmero 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 mtodo close(). Debe observarse que se realiza una gestin de excepcin 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 slo atender hasta tres clientes, y despus finalizar su ejecucin, 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 conexin con cada cliente. Mediante un ciclo for y la variable numCli se restringe el nmero 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 excepcin mediante getMessage(). 100% ITZ = instituto tecnologico de zacatepec
Buscar

EDIT

www.MiTecnologico.com

Politica de Privacidad _

You might also like