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
¡Pronto más!
¡Suscribete al feed RSS!
Sockets en .NET…
La entrada original está en http://csharp.hijodeblog.com/2011/07/21/sockets-en-net/, ¡no te la pierdas!…