Introducción a Winsock
Esta sección es una guía paso a paso para empezar a trabajar con la programación de Windows Sockets. Está diseñado para proporcionar una comprensión de las funciones básicas y las estructuras de datos de Winsock, y cómo funcionan conjuntamente.
La aplicación cliente y servidor que usamos en este tema para la ilustración es un cliente y servidor muy básico. Los ejemplos de código más avanzados se incluyen en los ejemplos incluidos con el Kit de desarrollo de software (SDK) de Microsoft Windows.
Los primeros pasos son los mismos para las aplicaciones cliente y servidor.
- Acerca de los servidores y clientes
- Creación de una aplicación básica de Winsock
- Inicialización de Winsock
En los artículos siguientes se describen los pasos restantes para crear una aplicación cliente winsock.
- Creación de un socket para el cliente
- Conexión a un socket
- Envío y recepción de datos en el cliente
- Desconectar el cliente
En los artículos siguientes se describen los pasos restantes para crear una aplicación de servidor Winsock.
- Creación de un socket para el servidor
- Enlace de un socket
- Escuchar en un socket
- Aceptar una conexión
- Recepción y envío de datos en el servidor
- Desconectar el servidor
Código fuente completo para estos ejemplos básicos.
- Ejecución del ejemplo de código de servidor y cliente de Winsock
- Completar el código de cliente de Winsock
- Completar el código del servidor winsock
Aplicaciones de ejemplo avanzadas de Winsock
Hay disponibles varias aplicaciones de ejemplo de servidor y cliente de Winsock más avanzadas en GitHub. Se enumeran aquí en orden de mayor a menor rendimiento y se encuentran en los directorios siguientes:
iocp
Esa carpeta contiene tres programas de ejemplo que usan puertos de finalización de E/S. Los programas incluyen: un servidor Winsock,
iocpserver
, que usa la función WSAAccept ; un servidor Winsock,iocpserverex
, que usa la función AcceptEx ; y un cliente de Winsock multiproceso simple,iocpclient
, que se usa para probar cualquiera de estos servidores.Los programas de servidor admiten la conexión de varios clientes mediante TCP/IP y el envío de búferes de datos de tamaño arbitrario que el servidor devuelve al cliente. Para mayor comodidad, se desarrolló un programa de cliente sencillo,
iocpclient
, para conectarse y enviar continuamente datos al servidor para hacer hincapié en el uso de varios subprocesos. Los servidores Winsock que usan puertos de finalización de E/S proporcionan el máximo rendimiento.Traslapo
Esta carpeta contiene un programa de servidor de ejemplo que usa E/S superpuesta. El programa de ejemplo usa la función AcceptEx y la E/S superpuesta para controlar eficazmente varias solicitudes de conexión asincrónicas de los clientes. El servidor usa la función AcceptEx para multiplexar diferentes conexiones de cliente en una aplicación Win32 de un solo subproceso. El uso de E/S superpuesta permite una mayor escalabilidad.
WSAPoll
Esta carpeta contiene un programa de ejemplo básico que muestra el uso de la función WSAPoll . El programa combinado de cliente y servidor no está bloqueado y usa la función WSAPoll para determinar cuándo es posible enviar o recibir sin bloqueo. Este ejemplo es ilustrativo y no es un servidor de alto rendimiento.
simple
Esta carpeta contiene tres programas de ejemplo básicos que muestran el uso de varios subprocesos por un servidor. Los programas incluyen: un servidor TCP/UDP simple,
simples
; un servidor solo TCP,simples_ioctl
, que usa la función select en una aplicación de consola Win32 para admitir varias solicitudes de cliente; y un programa TCP/UDP de cliente,simplec
, para probar los servidores. Los servidores muestran el uso de varios subprocesos para controlar varias solicitudes de cliente. Ese método tiene problemas de escalabilidad, ya que se crea un subproceso independiente para cada solicitud de cliente.accept
Esta carpeta contiene un programa cliente y servidor de ejemplo básico. El servidor muestra el uso de aceptación sin bloqueo mediante la función select o aceptación asincrónica mediante la función WSAAsyncSelect . Este ejemplo es ilustrativo y no es un servidor de alto rendimiento.