comunicacion entre procesos ssdd

74
Comunicacion entre procesos Lic. Jorge Guerra Guerra Mayo 2012 Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only.

Upload: jorge-guerra

Post on 24-May-2015

2.179 views

Category:

Technology


5 download

DESCRIPTION

Sesion 3 Sistemas Distribudos FISI UNMSM, año 2012

TRANSCRIPT

Page 1: Comunicacion entre procesos SSDD

Comunicacion entre procesos

Lic. Jorge Guerra Guerra

Mayo 2012

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 2: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 2

Comunicación entre procesos

•Es la cooperación entre procesos para lograr un objetivo global. (Cada proceso hace su labor).

•Dos Formas

–Procesos locales

–Procesos Remotos

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 3: Comunicacion entre procesos SSDD

Modalidades de interacción entre procesos

Lic. Jorge Guerra Guerra 3

Comunicación Unicast

Comunicación multicast

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 4: Comunicacion entre procesos SSDD

Comunicación en Sistemas Distribuidos

Red de comunicación es elemento fundamental para comunicación entre procesos.

Dos modelos de comunicación entre procesos:

Memoria compartida.

zona común en que los mensajes podrán ser compartidos entre cliente y servidor , la base de datos distribuida es un ejemplo de uso.

Lic. Jorge Guerra Guerra 4

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 5: Comunicacion entre procesos SSDD

Memoria compartida

Declaración independiente de variables

Datos

Texto

Proceso A Proceso B

Pila

Texto

Datos

PilaSegmento de memoriacompartida

var1

2

var2

2

Lic. Jorge Guerra Guerra 5

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 6: Comunicacion entre procesos SSDD

Modelos de comunicación (cont)

Paso de mensajes

En este modelo el proceso cliente y el proceso servidor se encuentran en máquinas distintas y no tienen ningún elemento común entre ellos, por lo que solo se servirán del medio de comunicación para intercambiarse mensajes.

Lic. Jorge Guerra Guerra 6

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 7: Comunicacion entre procesos SSDD

Paso de mensajes

Permite resolver: Exclusión mutua

Sincronizar un proceso que recibe un mensaje y otro que lo envía

Comunicación de datos entre espacios de memoria diferentes (mismo computador, diferentes computadores)

Primitivas básicas: send(destino, mensaje) envía un mensaje al proceso destino

receive(destino, mensaje) recibe un mensaje del proceso destino

Lic. Jorge Guerra Guerra 7

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 8: Comunicacion entre procesos SSDD

Paso de mensajes

Múltiples soluciones

Aspectos de diseño Tamaño del mensaje

Flujo de datos (unidireccional, bidireccional)

Nombrado Directo Indirecto (puertos, colas)

Sincronización (síncrono, asíncrono)

Almacenamiento

Lic. Jorge Guerra Guerra 8

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 9: Comunicacion entre procesos SSDD

Uso de colas y puertos

Comunicación con puertosComunicación con colas de mensajes

Proceso cliente Proceso clientesend

mensaje

receive

Cola de mensajes

Proceso cliente Proceso cliente

mensaje

Puertosend

Lic. Jorge Guerra Guerra 9

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 10: Comunicacion entre procesos SSDD

Tipos de paso de mensajes

Paso de mensajes puro

Lic. Jorge Guerra Guerra 10

Llamada a procedimientos remotos

Invocación a métodos remotos

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 11: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 11

Arquitectura de comunicaciones:Modelo Cliente/Servidor

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 12: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 12

Modelo con proxy o cache

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 13: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 13

Modelo multicapa

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 14: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 14

Código móvil

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 15: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 15

Modelo peer-to-peer

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 16: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 16

Factores de Comunicación

Los diferentes mecanismos de comunicación se caracterizan por los siguientes factores:

Rendimiento: Latencia, ratio de transferencia, ancho de banda, ...

Escalabilidad: Número de elementos activos.

Fiabilidad: Pérdida de mensajes.

Seguridad:Cifrado, certificación, ...

Movilidad: Equipos móviles.

Calidad de Servicio (QoS): Reserva y garantía de anchos de banda.

Comunicación en grupo: Multicast.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 17: Comunicacion entre procesos SSDD

Fundamentos de la comunicación entre procesos

Procesos en diferentes maquinas. Se requiere:

Una red de comunicaciones

Lenguaje común de comunicaciones

Protocolo de transporte

Lic. Jorge Guerra Guerra 17

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 18: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 18

Niveles de Comunicación

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 19: Comunicacion entre procesos SSDD

Tipos de comunicacion

Comunicación asíncrona - el remitente continúa inmediatamente después de enviar el mensaje, el mensaje se almacena en un búfer local.

Comunicación Síncrona - el remitente está bloqueado hasta que el mensaje sea almacenado en un búfer del host receptor, o efectivamente sea entregado al receptor

Lic. Jorge Guerra Guerra 19

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 20: Comunicacion entre procesos SSDD

Comunicación Síncrona VS Asíncrona

• Una cola está asociado con cada destino del mensaje.

• Los procesos de envío causaran que los mensajes se añadan a colas remotas.

• Los procesos de recepción eliminaran los mensajes de las colas locales.

Lic. Jorge Guerra Guerra 20

La comunicación entre los procesos de envío y recepción puede ser sincrónica o asincrónica.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 21: Comunicacion entre procesos SSDD

Comunicación Sincrona

Los procesos de envio y recepcion se sincronizan en cada mensaje.

En este caso, El send y receive son operaciones bloqueantes:

cuando un send() es ejecutado, el proceso de envío está bloqueado hasta que la recepción correspondiente se emita;

cada vez que una receive() es ejecutado,se bloquea el proceso de recepción hasta que llegue un mensaje.

Lic. Jorge Guerra Guerra 21

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 22: Comunicacion entre procesos SSDD

Comunicación Asincrona • La operacion send() es no-bloqueante:

‣ el proceso de envío termina tan pronto como el mensaje ha sido copiado en un buffer local;

‣ la transmisión del mensaje se realiza en paralelo con el proceso de envío.

• La operacion receive() puede ser bloqueante o no bloqueante:

‣ [no-bloqueante] El proceso de recepcion se realiza normalmente aun se haya ejecutado la operacion receive();

‣ [bloqueante] procesos de recepcion se bloquean hasta que un mensaje llegue.

Lic. Jorge Guerra Guerra 22

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 23: Comunicacion entre procesos SSDD

Primitivas de funcion para comunicación entre procesos

Lic. Jorge Guerra Guerra 23

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 24: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 24

Algoritmo: Paso de MensajesLos modelos de comunicación basados en cliente-servidor con paso de mensajes responden al esqueleto:

CLIENTEmsg

Send(msg)Send(msg)msg

SERVIDOR msg

Receive(msg)

Mensaje msg,reply;msg=<dato a trasmitir>send(msg);receive(reply);if(isOK(reply))<operación correcto>

else<error en operación>

...

Mensaje op,ack;receive(op);if(validOp(op))

ack=<operación OK>else

ack=<operación ERROR>send(ack);...

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 25: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 25

• Direcciones IP

Las direcciones IP son una serie de cuatro

cifras 0..255 (4 bytes, 32 bits) separadas por puntos.

Existe una dirección IP especial: 127.0.0.1 que referencia siempre nuestra máquina local. Por ello, tiene asociado el nombre "localhost".

Rangos reservados:

192.168.0.0 .. 192.168.0.255

192.168.1.0 .. 192.168.1.255

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 26: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 26

Puerto

FTP (21) WWW(80) IMAP(143) POP3(110)SMTP(25) SSH(22) TeInet(23) MysqI(3306)Observación: Los puertos del 1 al 1024 están reservados para el Sistema Operativo, por lo quelos demás se pueden usar para cualquier aplicación.

Código de identificación que generalmente está asignado de antemano por el fabricante de la aplicación que genera el proceso

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 27: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 27

Las capas TCP/IP

Application

Transport

Internet

Media access

Internet

Media access

Internet

Media access

Application

Transport

Internet

Media access

mail, file transfer, web

tcp, udp

ip

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 28: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 28

Capas, Protocolos y Mensajes

Application

Transport

Internet

Media access

M

MHt

MHtHi

MHtHiHm MHtHiHm

MHtHi

MHt

M

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 29: Comunicacion entre procesos SSDD

Representacion del modelo TCP/IP

Lic. Jorge Guerra Guerra 29

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 30: Comunicacion entre procesos SSDD

Protocolos en TCP/IP

Lic. Jorge Guerra Guerra 30

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 31: Comunicacion entre procesos SSDD

Capa de transporte

La capa de transporte tiene la misión de establecer la forma de enviar el mensaje producido en la capa de aplicación, para ello establece las siguientes operaciones:

La división del mensaje a enviar en unidades más pequeñas denominadas paquetes.

En el proceso emisor estos paquetes serán enviados mediante un criterio de transmisión determinado con destino al proceso receptor. En el proceso receptor la operación consiste en recuperar los paquetes recibidos y mediante un algoritmo de reconstrucción regenerar el mensaje original.

Lic. Jorge Guerra Guerra 31

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 32: Comunicacion entre procesos SSDD

Tipos de servicios en Capa de transporte

Servicios orientados a conexión

envío de paquetes en forma secuencial

camino o ruta de envío predefinida entre cliente/servidor (stream)

capacidad de retransmisión

es confiable y es poco probable la perdida de paquetes

el algoritmo de recuperación del mensaje recibido es sencillo

Lic. Jorge Guerra Guerra 32

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 33: Comunicacion entre procesos SSDD

Tipos de servicios en Capa de transporte

Servicios orientados a no conexión

No hay camino predeterminado entre cliente y servidor

La transmisión de los mensajes es de tipo paralela o simultánea

Cada paquete toma su propio camino para llegar a su destino

Es poco confiable

El algoritmo de recuperación del mensajes es más complejo utilizando para ello un algoritmo de ordenamiento

Lic. Jorge Guerra Guerra 33

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 34: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 34

Datagramas

En Internet, la información se transmite

mediante datagramas. La información se

divide en paquetes, denominados

datagramas IP.

Cada paquete puede seguir un camino

diferente desde el origen hasta el

destino, pueden llegar en distinto orden

de cuando se enviaron, o no llegar.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 35: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 35

TCP y UDP para Cliente / Servidor

TCP

request

response

UDP

T/TCP

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 36: Comunicacion entre procesos SSDD

Socket

Se considera como un extremo de una conexión de comunicación entre dos computadoras. Por otro lado, si lo vemos del punto de vista de la programación un socket representa el mecanismo para transferir datos de una computadora a otra

Lic. Jorge Guerra Guerra 36

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 37: Comunicacion entre procesos SSDD

Como funciona el socket

Lic. Jorge Guerra Guerra 37

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 38: Comunicacion entre procesos SSDD

Socket dentro del modelo TCP/IP

Lic. Jorge Guerra Guerra 38

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 39: Comunicacion entre procesos SSDD

Atributos de un socket

Dominio: Especifica el medio de comunicación de la red que el socket va a utilizar

Tipo: Define las características de la comunicación entre procesos en la que es usado un socket, es decir el tipo de comunicación que se realizara entre cliente y servidor.

Protocolo: La capa de transporte proporciona el protocolo necesario para el uso del socket.

Lic. Jorge Guerra Guerra 39

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 40: Comunicacion entre procesos SSDD

Tipos de Socket

Socket UDP

Socket TCP

Socket Raw

Socket SeqSocket

Lic. Jorge Guerra Guerra 40

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 41: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 41

Flujograma de sockets UDP

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 42: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 42

Flujograma de sockets TCP

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 43: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 43

Sockets en Java

Engloba en objetos cada una de las estructuras de la comunicación. Las funciones se tratan como métodos de dichos objetos: InetAddress

Socket DatagramSocket ServerSocket

Connection

DatagramPacket

Define un nivel de abstracción mayor, proporcionando constructores que realizan parte del proceso de inicialización de los elementos.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 44: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 44

Clases de comunicaciones-paquete java.net

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 45: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 45

Sockets en Java(Direccionamiento)

Las direcciones de Internet se asocian a objetos de la clase InetAddress. Estos objetos se construyen en base a métodos estáticos de la clase:

static InetAddress getByName(String host)

Obtiene una dirección IP en base al nombre (dominios o números).

static InetAddress getLocalHost()

Obtiene la dirección IP local.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 46: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 46

Sockets en Java (UDP)La información a trasmitir se asocia a un objetos de la clase DatagramPacket. Estos objetos se construyen con un array de bytesa transmitir:

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 47: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 47

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 48: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 48

Sockets en Java (UDP)La comunicación vía UDP se realiza por medio de objetos de la clase DatagramSocket.

DatagramSocket(int puerto,InetAddress dir)Crea un socket UDP con un bind a la dirección y puerto indicados. Dirección y puerto son opcionales (se elige uno libre).

void send(DatagramPacket paquete)Envía el datagrama a la dirección del paquete.

void receive(DatagramPacket paquete)Se bloquea hasta la recepción del datagrama.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 49: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 49

Sockets en Java (TCP)Se utilizan dos clases de socket (una para el cliente y otra para socket servidor).

Para el cliente: Socket(InetAddress dir, int puerto)

Crea un socket stream para el cliente conectado con la dirección y puerto indicados. Existen otros constructores con diferentes argumentos.

Para el servidor: ServerSocket(int puerto)

Crea un socket stream para el servidor. Existen otros constructores con diferentes argumentos.

Socket accept()

Prepara la conexión y se bloquea a espera de conexiones. Equivale a listen y accept de BSD Sockets. Devuelve un Socket.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 50: Comunicacion entre procesos SSDD

Ejemplo de comunicación TCP

Lic. Jorge Guerra Guerra 50

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 51: Comunicacion entre procesos SSDD

Streams TCP

Lic. Jorge Guerra Guerra 51

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 52: Comunicacion entre procesos SSDD

Transferencias de datos TCP

Lic. Jorge Guerra Guerra 52

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 53: Comunicacion entre procesos SSDD

Usando InputStream y OutputStream en TCP

Lic. Jorge Guerra Guerra 53

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 54: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 54

Cliente-servidor con sockets streams de Java

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 55: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 55

Clases URL / URLConnection

Estas clases tienen la misma funcionalidad

que las clases Socket y ServerSocket, pero

son más sencillas de utilizar (más alto nivel).

Nos permiten establecer una conexión con

cualquier recurso de Internet y descargar su

contenido, así como conectar dos

ordenadores y transferir datos mediante

flujos (streams).

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 56: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 56

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 57: Comunicacion entre procesos SSDD

Sockets en .NET

Implementación en C#

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 58: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 58

Absolute Basics

All socket services in System.Net.Sockets namespace

System.Net provides services for DNS, IP Addresses, HTTP services etc

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 59: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 59

Sockets TCP (lado servidor)

La creación de un servidor TCP no resulta demasiado complicada. En primer lugar, debemos establecer el socket a través del cual el servidor aceptará peticiones, para lo cual nos hace falta una dirección IP (la correspondiente a la máquina en la que se ejecute el servidor) y un número de puerto TCP:

// DNS: nombre del host -> dirección IPIPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());

IPAddress ipAddress = ipHostInfo.AddressList[0];// Puerto

IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 60: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 60

Creando un Socket

Must specify address family, socket type and protocol type

Address Family: InterNetwork (Addr for IP Ver 4).. InterNetworkV6 (ver 6)

Socket Type: Stream, Dgram, Raw etc

Protocol Type: Tcp, UdpSocket s = new Socket(AddressFamily.InterNetwork,

SocketType.Stream, ProtocolType.Tcp);

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 61: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 61

Sockets TCP (lado servidor) Una vez que tenemos el puerto a través del cual aceptaremos

conexiones, creamos físicamente el socket y lo configuramospara que pueda aceptar conexiones:

El método Listen pone el socket en estado de escucha y su parámetro establece la longitud máxima de la cola de conexiones pendientes que puede tener el servidor antes de empezar a rechazar conexiones [backlog, en inglés].

Socket listener = new Socket ( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp ); listener.Bind(localEndPoint); listener.Listen(100);

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 62: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 62

Sockets TCP (lado servidor) A continuación, nos quedamos esperando a que un cliente

establezca una conexión con nuestro servidor. El método Accept extrae la primera petición de la cola asociada al servidor y devuelve un nuevo socket que podemos utilizar

para comunicarnos con el cliente:

Socket handler = listener.Accept();

En este caso hemos utilizado los sockets de la forma tradicional (la misma que originalmente se ideó en la distribución BSD de UNIX): el servidor se queda esperando al llamar a Accept hasta que llegue alguna petición. En Windows, no obstante, también podríamos haber utilizado sockets de forma asíncrona, para evitar que el servidor

quede bloqueado indefinidamente.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 63: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 63

Next Step..Creating a data pipe

What we need… IP address and port number 162.312.324.400:8000

What we have… a more user friendly web address

What we need is known in C# as an Endpoint…there is an Endpoint Class for each family, for IP addresses the class is known as IPEndPoint

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 64: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 64

Sockets TCP (lado servidor) Cuando la llamada a Accept devuelve un nuevo socket, entonces

podemos realizar la tarea para la cual hayamos diseñado nuestro servidor. Por ejemplo, podemos construir un servidor que haga

de eco, devolviéndole al cliente lo mismo que éste le envíe:

byte[] bytes = new byte[1024];int count; String data = ""; do { count = handler.Receive(bytes); data += System.Text.Encoding.ASCII.GetString(bytes,0,count);} while ( data.IndexOf("<FIN>") == -1 ); // Eco Console.WriteLine( "Texto recibido received : {0}", data); byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);handler.Send(msg);handler.Shutdown(SocketShutdown.Both);handler.Close();

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 65: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 65

Creating the EndPoint...

Give user friendly address to Dns.Resolve

Returns a list of addresses… select one

Use the address to create the EndPoint

IPHostEntry iphost= Dns.Resolve (“http://ist.psu.edu”);

IPAddress ip=iphost.AddressList[0];

IPEndPoint EndPoint=new IPEndPoint(ip, portnumber);

s.Connect(EndPoint)

(note that port number must be Int16..use System.Convert.ToInt16)

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 66: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 66

Sending Data

The Send method can send data through a CONNECTED socket

byte[] msg = System.Text.Encoding.ASCII.GetBytes("This is a test");

int bytesSent = s.Send(msg);

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 67: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 67

Receiving Data

We use the Receive method (similar to Send)

byte[] bytes = new byte[1024];

s.Receive(bytes);

//Displays to the screen.

Console.WriteLine(Encoding.ASCII.GetString(bytes));

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 68: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 68

TCPListener

La plataforma .NET incluye una clase auxiliar denominada TcpListener que simplifica algo la creación de servidores TCP, si bien internamente se sigue haciendo lo mismo:

TcpListener listener = new TcpListener(11000);

listener.Start();

TcpClient client = listener.AcceptTcpClient();

...

La única diferencia reseñable es que ahora,en vez de utilizar Send y Receive, el objetode tipo TcpClient dispone de un stream através del cual leemos y escribimos datos.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 69: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 69

Sockets TCP (lado cliente)

string mensaje = "Hola... <FIN>"; string respuesta;Byte[] SendBytes = Encoding.ASCII.GetBytes(mensaje);Byte[] RecvBytes = new Byte[256]; int bytes;// DNS IPAddress address = Dns.Resolve("localhost").AddressList[0];// EndPoint IPEndPoint EPhost = new IPEndPoint(address, 11000); // Socket Socket socket = new Socket ( AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp ); // Conexióntry {

socket.Connect (EPhost); socket.Send( SendBytes, SendBytes.Length, SocketFlags.None);bytes = socket.Receive ( RecvBytes, RecvBytes.Length, SocketFlags.None);respuesta = Encoding.ASCII.GetString (RecvBytes, 0, bytes);while (bytes > 0) {

bytes = socket.Receive ( RecvBytes, RecvBytes.Length, SocketFlags.None);respuesta += Encoding.ASCII.GetString (RecvBytes, 0, bytes);

} Console.WriteLine(respuesta);

} catch (Exception error) { Console.WriteLine("ERROR - "+error);

}

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 70: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 70

TCPClientstring mensaje = "Hola... <FIN>";string respuesta;Byte[] SendBytes = Encoding.ASCII.GetBytes(mensaje);Byte[] RecvBytes = new Byte[256];int bytes;

// Cliente TCP TcpClient client = new TcpClient();NetworkStream stream;// Conexióntry { client.Connect("localhost",11000);stream = client.GetStream();stream.Write ( SendBytes, 0,SendBytes.Length ); bytes = stream.Read ( RecvBytes, 0, RecvBytes.Length); respuesta = Encoding.ASCII.GetString (RecvBytes, 0, bytes);while (bytes > 0) {bytes = stream.Read ( RecvBytes, 0, RecvBytes.Length );

respuesta += Encoding.ASCII.GetString (RecvBytes, 0, bytes);} Console.WriteLine(respuesta);

} catch (Exception error) {Console.WriteLine("ERROR - "+error);

}

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 71: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 71

Sockets UDP (fragmento de codigo)

IPAddress broadcastAddress = IPAddress.Parse("150.214.191.255"); string host = Dns.GetHostName();IPAddress localAddress = Dns.GetHostByName(host).AddressList[0]; int Port = 11000;

Thread listener;// Hebra empleada// para recibir mensajesbool fin = false;// Flag empleado para terminar la ejecución de la hebra Arranque private void ChatForm_Load (object sender, System.EventArgs e) { ThreadStart start = new ThreadStart(Listener); listener = new Thread(start);listener.Start(); }private void Listener() {while (!fin) { ... } } // Detención private void ChatForm_Closed (object sender, System.EventArgs e) { fin = true; Send("FIN");listener.Join(); }

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 72: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 72

Envio de mensajes UDPprivate void Send (string message) {IPEndPoint ep;

Socket socket;ep = new IPEndPoint(broadcastAddress, Port);socket = new Socket ( localAddress.AddressFamily,

SocketType.Dgram, ProtocolType.Udp); byte[] msg = Encoding.Default.GetBytes( message );try {

socket.SendTo ( msg, 0, msg.Length, SocketFlags.None, ep);} catch (Exception e) {

MessageBox.Show( e.ToString(), "Error enviando datos");}

}

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 73: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 73

Recepción Socket UDPprivate void Listener() {IPEndPoint localEP; Socket socket; localEP = new IPEndPoint(localAddress, Port);socket = new Socket ( localAddress.AddressFamily,SocketType.Dgram, ProtocolType.Udp);try{socket.Bind(localEP);

while (!fin) {// Buffer para recibir el mensajebyte[] buffer = new byte[1024];// IPEndPoint para identificar al emisor IPEndPoint sender = new IPEndPoint(IPAddress.Any,0);EndPoint remoteEP = (EndPoint) sender;// Recepción del mensaje (ojo: bloquea al receptor) socket.ReceiveFrom (buffer, ref remoteEP);string mensaje = Encoding.Default.GetString(buffer);textBoxDialog.AppendText(mensaje); }} catch (Exception e) { MessageBox.Show( e.ToString(), "Error recibiendo datos"); } }

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 74: Comunicacion entre procesos SSDD

Lic. Jorge Guerra Guerra 74

Shutdown sockets

The SocketShutdown enumeration defines constants that indicate whether the socket should be closed for sending, for receiving, or for both.

Call the Close method to free all managed and unmanaged resources associated with the Socket

s.Shutdown(SocketShutdown.Both);

s.Close();

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.