comunicacion entre procesos ssdd
DESCRIPTION
Sesion 3 Sistemas Distribudos FISI UNMSM, año 2012TRANSCRIPT
Comunicacion entre procesos
Lic. Jorge Guerra Guerra
Mayo 2012
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Lic. Jorge Guerra Guerra 11
Arquitectura de comunicaciones:Modelo Cliente/Servidor
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
Lic. Jorge Guerra Guerra 12
Modelo con proxy o cache
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
Lic. Jorge Guerra Guerra 13
Modelo multicapa
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
Lic. Jorge Guerra Guerra 14
Código móvil
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
Lic. Jorge Guerra Guerra 15
Modelo peer-to-peer
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
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.
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.
Lic. Jorge Guerra Guerra 18
Niveles de Comunicación
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Representacion del modelo TCP/IP
Lic. Jorge Guerra Guerra 29
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
Protocolos en TCP/IP
Lic. Jorge Guerra Guerra 30
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
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.
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.
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.
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.
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.
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.
Como funciona el socket
Lic. Jorge Guerra Guerra 37
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
Socket dentro del modelo TCP/IP
Lic. Jorge Guerra Guerra 38
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
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.
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.
Lic. Jorge Guerra Guerra 41
Flujograma de sockets UDP
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
Lic. Jorge Guerra Guerra 42
Flujograma de sockets TCP
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
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.
Lic. Jorge Guerra Guerra 44
Clases de comunicaciones-paquete java.net
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
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.
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.
Lic. Jorge Guerra Guerra 47
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
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.
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.
Ejemplo de comunicación TCP
Lic. Jorge Guerra Guerra 50
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
Streams TCP
Lic. Jorge Guerra Guerra 51
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
Transferencias de datos TCP
Lic. Jorge Guerra Guerra 52
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
Usando InputStream y OutputStream en TCP
Lic. Jorge Guerra Guerra 53
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
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.
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.
Lic. Jorge Guerra Guerra 56
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
Sockets en .NET
Implementación en C#
Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.