Prise en main de Winsock

Cette section est un guide pas à pas pour la prise en main de la programmation Windows Sockets. Il est conçu pour fournir une compréhension des fonctions de base de Winsock et des structures de données, et de la façon dont elles fonctionnent ensemble.

L’application cliente et serveur que nous utilisons dans cette rubrique à titre d’illustration est un client et un serveur très basiques. Des exemples de code plus avancés sont inclus dans les exemples inclus avec le Kit de développement logiciel (SDK) Microsoft Windows.

Les premières étapes sont les mêmes pour les applications clientes et serveurs.

Les articles suivants décrivent les étapes restantes pour créer une application cliente Winsock.

Les articles suivants décrivent les étapes restantes pour créer une application serveur Winsock.

Code source complet pour ces exemples de base.

Exemples d’applications Winsock avancées

Plusieurs exemples d’applications clientes et serveurs Winsock plus avancées sont disponibles sur GitHub. Elles sont répertoriées ici dans l’ordre de performances supérieures à inférieures, et se trouvent dans les répertoires suivants :

  • iocp

    Ce dossier contient trois exemples de programmes qui utilisent des ports d’achèvement d’E/S. Les programmes incluent : un serveur Winsock, iocpserver, qui utilise la fonction WSAAccept , un serveur Winsock, iocpserverex, qui utilise la fonction AcceptEx ; et un client Winsock multithread simple, iocpclient, utilisé pour tester l’un de ces serveurs.

    Les programmes serveur prennent en charge la connexion de plusieurs clients à l’aide de TCP/IP et l’envoi de mémoires tampons de données de taille arbitraire que le serveur renvoie ensuite au client. Pour des raisons pratiques, un programme client simple, iocpclient, a été développé pour se connecter et envoyer continuellement des données au serveur afin de le stresser à l’aide de plusieurs threads. Les serveurs Winsock qui utilisent des ports d’achèvement d’E/S offrent les meilleures performances.

  • Chevauchement

    Ce dossier contient un exemple de programme serveur qui utilise des E/S superposées. L’exemple de programme utilise la fonction AcceptEx et les E/S qui se chevauchent pour gérer efficacement plusieurs demandes de connexion asynchrone des clients. Le serveur utilise la fonction AcceptEx pour multiplexer différentes connexions clientes dans une application Win32 à thread unique. L’utilisation d’E/S superposées permet une plus grande scalabilité.

  • WSAPoll

    Ce dossier contient un exemple de programme de base qui illustre l’utilisation de la fonction WSAPoll . Le programme client et serveur combiné ne sont pas bloquants et utilisez la fonction WSAPoll pour déterminer quand il est possible d’envoyer ou de recevoir sans bloquer. Cet exemple est à titre d’illustration et n’est pas un serveur hautes performances.

  • simple

    Ce dossier contient trois exemples de programmes de base qui illustrent l’utilisation de plusieurs threads par un serveur. Les programmes incluent : un serveur TCP/UDP simple, simplesun serveur TCP uniquement, simples_ioctl, qui utilise la fonction select dans une application console Win32 pour prendre en charge plusieurs demandes clientes et un programme TCP/UDP client, simplec, pour tester les serveurs. Les serveurs illustrent l’utilisation de plusieurs threads pour gérer plusieurs demandes clientes. Cette méthode présente des problèmes d’extensibilité, car un thread distinct est créé pour chaque requête cliente.

  • accepter

    Ce dossier contient un exemple de serveur et de programme client de base. Le serveur illustre l’utilisation de l’acceptation non bloquante à l’aide de la fonction select ou de l’acceptation asynchrone à l’aide de la fonction WSAsyncSelect . Cet exemple est à titre d’illustration et n’est pas un serveur hautes performances.