Sockets en C#.Net

¿Qué es un socket?

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.

Un socket queda definido por una dirección IP, un protocolo y un número de puerto.

 

Nosotros utilizaremos el protocolo TCP

Basicamente al socket le pasaremos la IP a conectar, el puerto a
conectar/escuchar y el protocolo, aparte de otras cosas, pero lo importante es
eso

 

Para inidicar que queremos trabajar con sockets, tenemos que agregar la
siguientes lineas en el Using:

 

using System.Net;

using
System.Net.Sockets;

 

Asi le indicamos que trabajaramos con sockets.

Para conseguir la direccion del IP se usa el IPAddress, un ejemplo y
luego lo explico

 

IPAddress address = Dns.GetHostEntry("localHost").AddressList[0]; 

 

Lo que se hace aqui es poner dentro de direc la IP de localhost, eso no
se guarda ni en int ni en long ni en string, se guarda en IPAddress, para luego
usarse en la siguiente instrucción:

 

Código:

IPEndPoint Ep = new IPEndPoint(direccion, puerto);

NOTA: Aunque se trabaje con numeros, esos numeros de la IP se tienen que
pasar a IPAddress, ya que como int no lo va a tomar.

 

Donde direccion es lo que habiamos conseguido antes con IPAddress, y en
puerto le ponemos un int que queramos, por ejemplo:

 

Código:

IPEndPoint Epoint = new IPEndPoint(address, 1752);

 

Lo siguiente es crear el socket con lo obtenido hasta ahora. Lo
llamaremos asi:

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

 

Programando una aplicacion
Cliente-Servidor

 

Al codigo que teniamos antes le agregamos estas lineas:

 

Código:

socket.Bind(Epoint);

 socket.Listen(100);

 

Lo que hacemos aqui es proceder a escuchar por el puerto descrito en
Epoint (recuerden que era el 1752). Luego en la siguiente linea, el parametro
de Listen establece la longitud máxima de la cola de conexiones pendientes que
puede tener el servidor antes de empezar a rechazar conexiones.

 

La siguiente linea a agregar es la siguiente:

 

 Socket handler = socket.Accept();

Esta linea indica que el servidor queda esperando una llamada para luego
aceptarla

Demo:
        public void DemoWithTCP()
        {
            IPAddress address = Dns.GetHostEntry("localHost").AddressList[0];
            IPEndPoint Epoint = new IPEndPoint(address, 1752);

            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            socket.Bind(Epoint);
            socket.Listen(100);

            Socket handler = socket.Accept();

            byte[] bytes = new byte[1024]; //Declaramos un array de bytes de longitud 1024
            int count;
            string data = ""; //Declaramos data, que sera donde se almacenaran los datos

            do
            {
                count = handler.Receive(bytes);  //Recibimos los datos enviados y lo guardamos en count
                data = Encoding.ASCII.GetString(bytes, 0, count); //Lo codificamos a cadena (ya que se envian como bytes)
                if (data != "exit\n") //Mientras lo recibido no sea exit + \n (es decir, exit + Intro, ya que intro tambien se envia)
                {
                    Console.Write("Se ha recibido: {0}" + data); //Mostramos lo recibido pro pantalla
                }
            } while (data != "exit\n"); //Mientras lo recibido no sea exit + Intro se continua el bucle, si recibimos exit + intro, salimos del bucle

            Console.Write("Se ha Finalizado la conexión"); //Avisamos qde que se a terminado la transferencia de datos

            byte[] msg = Encoding.ASCII.GetBytes("\n\nFinalizada conexión con la aplicación"); //Codificamos de string a byte el siguiente mensage para que se pueda enviar al NetCat (Cliente)
            handler.Send(msg); //Enviamos el mensaje al cliente
            handler.Shutdown(SocketShutdown.Both); //"Apagamos" los sockets
            handler.Close();
        }
    }

About justindeveloper

I am MCP (Microsoft Certified Professional). MCTS (Microsoft Certified Technology Specialist) and MCPD (Microsoft Certified Professional Developer), also I am SAP Business One Certified!! Desarrollando desde el IDE de Visual Studio NET 2003 hasta ahora con el Visual Studio NET 2010. Desde Microsoft SQL Server 2000 hasta ahora con el Microsoft SQL Server 2008 R2 y tambien con SharePoint, desde WSS 3.0 y MOSS 2007 y ahora familirizandome con el Sharepoint Foundation 2010 & Sharepoint Server 2010. The software development will follow being every time more wonderful!
This entry was posted in Development. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s