Compartir a través de


Windows Sockets: Sockets de secuencias

En este artículo se describen los sockets de flujo, uno de los dos tipos de Windows Socket disponibles. (el otro tipo es el socket de datagrama).

Los sockets de flujo permiten un flujo de datos sin límites de registro: una secuencia de bytes que puede ser bidireccional (la aplicación es «full duplex»: puede tanto transmitir como recibir a través del socket). Se puede confiar en que las secuencias entreguen datos secuenciados y no duplicados. ("Secuenciado" significa que los paquetes se entregan en el orden en que fueron enviados. "No duplicado" significa que se recibe un paquete específico solo una vez). Se garantiza la recepción de mensajes de transmisión de datos, y las secuencias son adecuadas para manejar grandes cantidades de datos.

La capa de transporte de red puede dividir o agrupar datos en paquetes de tamaño razonable. La clase CSocket se encargará del empaquetado y desempaquetado por usted.

Las secuencias se basan en conexiones explícitas: socket A solicita una conexión al socket B; socket B acepta o rechaza la solicitud de conexión.

Una llamada telefónica proporciona una buena analogía para un flujo. En circunstancias normales, la parte receptora escucha lo que dice en el orden en que lo dice, sin duplicación ni pérdida. Los sockets de flujo son adecuados, por ejemplo, para implementaciones como el Protocolo de transferencia de archivos (FTP), que facilita la transferencia de archivos ASCII o archivos binarios de tamaño arbitrario.

Los sockets de secuencias son una opción preferible a los sockets de datagrama cuando debe haber una garantía de que los datos van a llegar y cuando el tamaño de los datos es grande. Para obtener más información sobre los sockets de flujo, consulte la especificación de Windows Sockets. La especificación está disponible en Windows SDK.

Usar sockets de secuencias puede ser más favorable que usar aplicaciones diseñadas para usar un socket de datagrama para la difusión a todos los sockets receptores de la red, por los siguientes motivos:

  • El modelo de difusión está sujeto a problemas de inundación de red (o "tormenta").

  • El modelo cliente-servidor adoptado posteriormente es más eficaz.

  • El modelo de flujo proporciona una transferencia de datos confiable, donde el modelo de datagramas no lo hace.

  • El modelo final aprovecha la capacidad de comunicarse entre las aplicaciones de socket Unicode y ANSI que la clase CArchive presta a la clase CSocket.

    Nota:

    Si usas la clase CSocket, debes utilizar un flujo. Se produce un error en una aserción de MFC si especifica el tipo de socket como SOCK_DGRAM.

Consulte también

Windows Sockets en MFC
Windows Sockets: Introducción