You are on page 1of 6

ESCUELA SUPERIOR POLITCNICA DE CHIMBORAZO

ESCUELA DE INGENIERA EN SISTEMAS


SOCKEST
IMPLEMENTACIN EN C#

EDISON RODRGUEZ 22/11/2012

5113

RIOBAMBA - ECUADOR

INTRODUCCION

Los sockets son un sistema de comunicacin entre procesos de diferentes mquinas de una red. Ms exactamente, un socket es un punto de comunicacin por el cual un proceso puede emitir o recibir informacin. Los sockets fueron desarrollados como un intento de generalizar el concepto de pipe (tubera unidireccional para la comunicacin entre procesos en el entorno Unix) en 4.2BSD bajo contrato por DARPA (Defense Advanced Research Projects Agency). Sin embargo, fueron popularizados por Berckley Software Distribution, de la Universidad Norteamericana de Berkley.

Definicin: Un socket es un punto final de un enlace de comunicacin de dos vas entre dos programas que se ejecutan a travs de la red. El cliente y el servidor deben ponerse de acuerdo sobre el protocolo que utilizarn.

Cmo funciona un Socket El siguiente procedimiento muestra cmo funciona un Socket: Primero: Tenemos que poner en funcionamiento el proceso que se encargar de recibir los datos, el cual estar a la espera de recibir la comunicacin del cliente. Segundo: Ejecutamos el proceso cliente, que ser un socket encargado de enviar datos al servidor que se encuentra esperando nuestra conexin.

Tercero: Por ltimo, el cliente realizar una peticin al servidor y el servidor gestionar la respuesta que quiere darle. Y finalmente, el cliente recibir la respuesta del servidor.

Tipos de Socket Dependiendo el protocolo con el que vamos a realizar la conexin, tendremos dos tipos de Socket, los que utilizan el protocolo TCP, y los que utilizan el protocolo UDP. El protocolo TCP tiene las siguientes caractersticas: Est orientado a la conexin. Garantiza la correcta transmisin de los ficheros. Mantiene el orden de los ficheros en la transmisin. Cuando llegan los paquetes el receptor emite un mensaje de recepcin (ACK).

El protocolo UDP tiene las siguientes caractersticas: No est orientado a la conexin. Los datagramas o paquetes pueden viajar en cualquier orden. No garantiza que lleguen todos los paquetes.

DESARROLLO
Cliente. sing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading; namespace Servidor { class Cliente { static string name = ""; static int port = 9000; static IPAddress ip; static Socket sck; static Thread rec;

static void recV() { while (true) { Thread.Sleep(500); byte[] buffer = new byte[255]; int rec = sck.Receive(buffer, 0, buffer.Length, 0); Array.Resize(ref buffer, rec); Console.WriteLine(Encoding.Default.GetString(buffer)); } } static void Main(string[] args) { rec = new Thread(recV); Console.WriteLine("Please enter your name"); name = Console.ReadLine(); Console.WriteLine("Please enter the ip of the server"); ip = IPAddress.Parse(Console.ReadLine()); Console.WriteLine("Please enter the Port"); string inputPort = Console.ReadLine(); try { port = Convert.ToInt32(inputPort); } catch {port = 9000;} sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sck.Connect(new IPEndPoint(ip, port)); rec.Start(); byte[] conmsg = Encoding.Default.GetBytes("<" + name + ">" + "Connected"); sck.Send(conmsg, 0, conmsg.Length, 0); while (sck.Connected) { byte[] sdata = Encoding.Default.GetBytes("<"+name+">"+Console.ReadLine()); } } } } Servidor using using using using using using using System; System.Collections.Generic; System.Linq; System.Text; System.Net; System.Net.Sockets; System.Threading;

namespace Server

{ class Server { static Socket sck; static Socket acc; static int port = 9000; static IPAddress ip; static Thread rec; static string name; static string GetIp() { string strHostName = System.Net.Dns.GetHostName(); IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName); IPAddress[] addr = ipEntry.AddressList; return addr[addr.Length - 1].ToString(); } static void recV() { while (true) { Thread.Sleep(500); byte[] buffer = new byte[255]; int rec = acc.Receive(buffer, 0, buffer.Length, 0); Array.Resize(ref buffer, rec); Console.WriteLine(Encoding.Default.GetString(buffer)); } } static void Main(string[] args) { rec = new Thread(recV); Console.WriteLine("Your local IP is" + GetIp()); Console.WriteLine("Please enter your name"); name = Console.ReadLine(); Console.WriteLine("Please enter your Host Port"); string inputPort = Console.ReadLine(); try { port = Convert.ToInt32(inputPort);} catch { port = 9000; } ip = IPAddress.Parse(GetIp()); sck = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); sck.Bind(new IPEndPoint(ip,port)); sck.Listen(0); acc = sck.Accept(); rec.Start(); while (true) { byte[] sdata = Encoding.Default.GetBytes("<"+name+">"+Console.ReadLine()); acc.Send(sdata,0,sdata.Length,0);

} }

} }

Ejecutamos los procesos

SERVIDOR

CLIENTE

Conclusiones y recomendaciones. Los sockets son mecanismos que permiten una comunicacin sencilla entre procesos remotos, otorgando distintos niveles de fiabilidad de acuerdo al tipo de socket que se use, es decir, que dependiendo de la aplicacin y del tipo de socket que se use en ella, la comunicacin siempre se realizar dentro de los parmetros predefinidos. El uso de sockets se ha extendido debido a que han sido diseadas para servir en la comunicacin en el protocolo IP; resultando eficientes al momento de su aplicacin.

You might also like