Partager via


Acceptation d’une connexion (Windows Sockets 2)

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

Accepter une connexion sur un socket

  1. Créez un objet SOCKET temporaire appelé ClientSocket pour accepter des connexions à partir de 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 clientes multiples.

    Il existe plusieurs techniques de programmation différentes à l’aide de 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 requêtes de connexion à l'aide de la fonction listen (voir Écouter sur une socket). Si une demande de connexion se produit, l’application appelle la fonction accept, la fonction AcceptEx, ou la fonction WSAAccept, et transmet le travail à un autre thread pour traiter la requête. 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 se contente également d'écouter et d'accepter 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. Lorsque la connexion cliente a été acceptée, une application serveur transmet 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 plusieurs autres techniques de programmation qui peuvent être utilisées pour écouter et accepter plusieurs connexions. Il existe d'autres techniques de programmation, comme l'utilisation des fonctions select ou WSAPoll. Des exemples de certaines de ces différentes techniques de programmation sont illustrés dans les exemples Advanced Winsock inclus dans le Kit de développement logiciel (SDK) Microsoft Windows.

    Remarque

    Sur les systèmes Unix, une technique de programmation courante pour les serveurs était pour qu’une application écoute les connexions. Lorsqu’une connexion a été acceptée, le processus parent appelle la fonction fork pour créer un nouveau processus enfant pour gérer la connexion du client, héritant du socket du parent. Cette technique de programmation n'est pas supportée sous Windows, car la fonction fork n'est pas supportée. Cette technique ne convient pas également généralement aux serveurs hautes performances, car les ressources nécessaires à la création d’un processus sont beaucoup plus importantes que celles nécessaires pour un thread.

Une fois que la accepter fonction est appelée, la ListenSocket n’est plus nécessaire pour cet exemple. La fonction closesocket est appelée pour fermer la socket.

    // No longer need server socket
    closesocket(ListenSocket);

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

Bien démarrer avec Winsock

Application serveur Winsock

Écouter sur une socket