Introducción Arquitectura Cliente-Servidor Evolución Networking Socket en Java.

Post on 03-Jan-2015

16 views 0 download

Transcript of Introducción Arquitectura Cliente-Servidor Evolución Networking Socket en Java.

Introducción Arquitectura Cliente-Servidor Evolución Networking Socket en Java

Objetivos Networking:₋ Crear aplicaciones distribuidas₋ Comunicar o interoperar aplicaciones por redes

conocidas (LAN, Internet, etc.)

Es una combinación de sistemas que pueden colaborar entre si para dar a los usuarios toda la información que ellos necesiten sin que tengan que saber donde esta ubicada.

Es una arquitectura de procesamientos cooperativo donde uno de los componentes pide servicios a otro.

Se aprovecha la potencia de cómputo de las estaciones de trabajo

Se ubica el procesamiento cerca de las fuentes de trabajo reduciendo tráfico y tiempo de respuesta

Facilita la gestión de cambios de software

Alienta la aceptación de sistemas abiertos. Libera a los usuarios de las arquitecturas propietarias

El servidor puede convertirse en cuello de botella

Costo elevado

Software y hardware específico

Modelo de sistemas y/o de aplicaciones, en el cual las funciones y los datos pueden estar distribuidos a través de múltiples recursos de cómputo, conectados en un ambiente de redes LAN o WAN.

Sockets₋ Punto de comunicación por el cual un proceso

puede enviar o recibir información₋ Canal de comunicación bidireccional

₋ Comunicación por TCP/IP₋ Requieren del conocimiento por parte del cliente

de la máquina y puerto donde está el servidor.₋ La comunicación cliente/servidor debe

implementar un protocolo tratado en tiempo de programación

CORBA (Common Object Request Broker Architecture)

₋ Un producto de la O.M.G. (Object Management Group)

₋ Un entorno para la ejecución de P.O.O. Distribuido.

₋ Esta especificación debe ser implementada para los distintos lenguajes de programación

RMI (Remote Method Invocation)

₋ Es un API standard para construir sistemas distribuidos en Java

₋ 100 % Java

₋ Permite que programas residentes en una computadora, realicen llamadas a metodos sobre objetos existentes en otras.

Web Services₋ Especificación para interoperar sistemas

informáticos₋ Estándar SOAP sobre HTTP₋ Adoptado por .NET, JAVA, etc.₋ Ideal para Internet

Direccionar la conexión:₋ La ubicación o nombre de la máquina remota₋ Número del Puerto para identificar el propósito

en el servidor

Números de Puertos:₋ Rango desde 0 a 65535

Servidor

Boolean stop= false;SockeServer ss= new SocketServer(PortNumber);while (!stop){

Socket s = ss.accept();DataInputStream input = new

DataInputStream(s.getInputStream());DataOutputStream output =output = new

DataOutputStream(s.getOutputStream());……

}

Cliente Socket s;

try { s = new Socket(ServerAddress,PortNumber); DataOutputStream output = new DataOutputStream( s.getOutputStream()); DataInputStream input = new DataInputStream(s.getInputStream()); ……… s.close();} catch (UnknownHostException e) { e.printStackTrace();} catch (IOException e) { e.printStackTrace();}

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 );

InputStream aux = skCliente.getInputStream();

DataInputStream flujo = new DataInputStream( 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 skCliente, 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) DataInputStream de 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.

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 bucles infinitos ( while(true) ) en los servidores, para que atiendan llamadas continuamente.

Utiliza un objeto de la clase ServerSocket (skServidor), 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 bucle 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 laccept() de la clase ServerSocket, 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 DataOutputStream de escritura secuencial, en el que se escribe el mensaje a enviar al cliente.

Introducción Arquitectura Cliente-Servidor Evolución Networking RMI-CORBA Web Services Sockets en Java

The Java Tutorialhttp://java.sun.com/docs/books

OMGhttp://www.omg.org

Examples from Java Network Programminghttp://www.ibiblio.org/java/books/jnp/javanetexamples/

index.html Java 109 : Networking with Javahttp://www.javacoffeebreak.com/java109/java109.html Ecuredhttp://www.ecured.cu/index.php/

Arquitectura_Cliente_Servidor