Partager via


Acceptation d’une connexion (Windows Sockets 2)

Une fois que le socket est à l’écoute d’une connexion, le programme doit gérer les demandes de connexion sur ce socket.

Pour accepter une connexion sur un socket

  1. Créez un objet SOCKET temporaire appelé ClientSocket pour accepter les connexions des clients.

    
    SOCKET ClientSocket;
    
    
    
  2. Normalement, une application serveur est conçue pour écouter les connexions de plusieurs clients. Pour les serveurs hautes performances, plusieurs threads sont couramment utilisés pour gérer les connexions client multiples.

    Il existe plusieurs techniques de programmation différentes utilisant Winsock qui peuvent être utilisées pour écouter plusieurs connexions clientes. Une technique de programmation consiste à créer une boucle continue qui vérifie les demandes de connexion à l’aide de la fonction listen (voir Écoute sur un socket). Si une demande de connexion se produit, l’application appelle la fonction accept, AcceptEx ou WSAAccept et transmet le travail à un autre thread pour gérer la demande. Plusieurs autres techniques de programmation sont possibles.

    Notez que cet exemple de base est très simple et n’utilise pas plusieurs threads. L’exemple écoute et n’accepte qu’une seule connexion.

    
    ClientSocket = INVALID_SOCKET;
    
    // Accept a client socket
    ClientSocket = accept(ListenSocket, NULL, NULL);
    if (ClientSocket == INVALID_SOCKET) {
        printf("accept failed: %d\n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }
    
    
    
  3. Une fois la connexion cliente acceptée, une application serveur passe normalement le socket client accepté (la variable ClientSocket dans l’exemple de code ci-dessus) à un thread de travail ou à un port d’achèvement d’E/S et continue d’accepter des connexions supplémentaires. Dans cet exemple de base, le serveur passe à l’étape suivante.

    Il existe un certain nombre d’autres techniques de programmation qui peuvent être utilisées pour écouter et accepter plusieurs connexions. Il s’agit notamment de l’utilisation des fonctions select ou WSAPoll . Des exemples de certaines de ces différentes techniques de programmation sont illustrés dans les exemples Winsock avancés inclus dans le Kit de développement logiciel (SDK) Microsoft Windows.

    Notes

    Sur les systèmes Unix, une technique de programmation courante pour les serveurs consistait à permettre à une application d’écouter les connexions. Lorsqu’une connexion était acceptée, le processus parent appelait la fonction de duplication pour créer un processus enfant pour gérer la connexion cliente, en héritant le socket du parent. Cette technique de programmation n’est pas prise en charge sur Windows, car la fonction de duplication n’est pas prise en charge. Cette technique n’est pas non plus généralement adaptée aux serveurs hautes performances, car les ressources nécessaires à la création d’un processus sont bien supérieures à celles nécessaires pour un thread.

     

Étape suivante : réception et envoi de données sur le serveur

Prise en main avec Winsock

Application serveur Winsock

Écoute sur un socket