Sockets en .NET

Uno de los componentes básicos de las aplicaciones de hoy en día son los sockets, que permiten enviar y recibir datos a través de redes TCP/IP, es decir, permiten que nuestra aplicación se comunique con el mundo que la rodea. Veremos cómo inicializar, finalizar y utilizar éstos importantísimos elementos:

Inicializar un socket

Para inicializar un socket tendremos que usar un código como éste (detallaré cada elemento con los comentarios del código fuente):

// Basta con crear el objeto especificando su configuración con las
// enumeraciones AddressFamily, SocketType y ProtocolType
Socket socket = new Socket
(
AddressFamily.InterNetwork,    // IPv4
SocketType.Stream,             // Basado en streams
ProtocolType.Tcp               // TCP
);

Recibir datos del socket

Para recibir datos del socket tendremos que asociar el socket a un puerto (detallaré cada elemento con los comentarios del código fuente):

// Determinamos el punto final al que llegarán las peticiones
// y nos ponemos a escuchar
socket.Bind(new IPEndPoint(IPAddress.Any, Int32.Parse(textBoxPuertoEscucha.Text)));
socket.Listen(5); // Número máximo de peticiones en cola

Luego, para recibir en si, tendremos que usar un código como éste:

// Esperamos una conexión entrante
while (!socket.Poll(socket.ReceiveTimeout, SelectMode.SelectRead))
{
	// Aún no ha llegado, haremos lo que sea necesario aquí
	// ...
}

// Aceptamos la conexión
Socket cliente = socket.Accept();
if (cliente != null)
{
	// Recibimos datos
	try
	{
		int numLeidos = cliente.Receive(buffer, 0, 256, SocketFlags.None);
		recibido += ASCIIEncoding.ASCII.GetString(buffer, 0, numLeidos);
	}
	catch (Exception ee)
	{
		// Algo ha sucedido...
	}

	// Registramos lo recibido
	if (recibido != "")
	{
		// Procesamos aquí lo recibido como sea necesario
		// ...
	}
}

Enviar datos por el socket

Para enviar datos por el socket tendremos que usar un código como éste (detallaré cada elemento con los comentarios del código fuente):

// Creamos un socket de envío
Socket socketEnvio = new Socket
(
	AddressFamily.InterNetwork,
	SocketType.Stream,
	ProtocolType.Tcp
);

// Conectamos a una IP y un puerto concreto
IPAddress[] direcciones = Dns.GetHostEntry("SERVIDOR").AddressList;
IPAddress direccionRemota = null;

foreach (IPAddress d in direcciones)
{
	if (d.AddressFamily == AddressFamily.InterNetwork)
	{
		direccionRemota = d;
	}
}

socketEnvio.Connect(new IPEndPoint(direccionRemota, Int32.Parse("PUERTO")));

// Enviamos los datos
socketEnvio.Send(System.Text.Encoding.ASCII.GetBytes(paqueteAEnviar));

// Desconectamos
socketEnvio.Close();

Finalizar un socket

Para finalizar un socket tendremos que usar un código como éste (detallaré cada elemento con los comentarios del código fuente):

// Desconectamos
socket.Close();

Conclusión

Hemos visto un componente muy importante que nos abre un mundo de posibilidades. Una pieza más para el puzzle que son nuestras aplicaciones icon smile Sockets en .NET ¡Pronto más!

¿Te ha gustado?
Envía tus Trackbacks a la siguiente dirección:
http://csharp.hijodeblog.com/2011/07/21/sockets-en-net/trackback/

Comentarios a la entrada

  1. Por Planeta Hijo de Blog (C# Snippets), el 21-07-2011 a las at 22:05

    Sockets en .NET…

    La entrada original está en http://csharp.hijodeblog.com/2011/07/21/sockets-en-net/, ¡no te la pierdas!…

¡Deja tu comentario!





Disclaimer: Las imágenes mostradas en ésta página web se utilizan sólamente con propósitos ilustrativos, y son propiedad de sus respectivos autores (cuando es aplicable).
Hijo de Blog es un producto del Dr. SeROne

Los contenidos se ofrecen bajo una licencia de Creative Commons
Attribution-NonCommercial-NoDerivs 3.0 Unported

salvo que se indique lo contrario

Licencia de Creative Commons