Partager via


Windows Sockets : À l'aide de la classe CAsyncSocket

Cet article explique comment utiliser la classe CAsyncSocket.Sachez que cette classe encapsule l'API Windows Sockets très à un niveau inférieur.CAsyncSocket doit être utilisée par les programmeurs qui connaissent la communication réseau en détail mais souhaite la commodité des rappels pour la notification des événements de réseau.Selon cette hypothèse, cet article fournit uniquement l'instruction fondamentale.Vous devez envisager probablement d'utiliser CAsyncSocket si vous souhaitez que la facilité des Winsocks de gérer plusieurs fournisseurs réseau dans une application MFC mais ne souhaitez pas sacrifier la souplesse.Vous pouvez également estimer que vous pouvez obtenir une meilleure efficacité en programmation les communications plus directement vous-même que vous pouvez utiliser l'autre modèle plus général de la classe CSocket.

CAsyncSocket est documenté dans MFC Reference.Visual C++ fournit également la spécification Windows Sockets, située dans Kit de développement logiciel Windows.Les détails sont laissés à vous.Visual C++ ne fournit pas un exemple d'application pour CAsyncSocket.

Si vous n'êtes pas très bien informée des communications réseau et ne souhaitez pas une solution simple, utilisez la classe CSocket à un objet d' CArchive .Consultez Windows Sockets : Utilisation des sockets avec des archives pour plus d'informations.

Cet article aborde :

  • Création et utilisation d'un objet d' CAsyncSocket .

  • vos responsabilités avec CAsyncSocket.

Création et utilisation d'un objet de CAsyncSocket

Pour utiliser CAsyncSocket

  1. Construisez un objet de CAsyncSocket et utiliser l'objet pour créer le handle sous-jacent de SOCKET .

    La création d'un socket suit le modèle de MFC de la construction à deux couches.

    Par exemple :

    CAsyncSocket sock;
    sock.Create( );    // Use the default parameters                    
    

    ou

    CAsyncSocket* pSocket = new CAsyncSocket;
    int nPort = 27;
    pSocket->Create( nPort, SOCK_DGRAM );                    
    

    Le premier constructeur ci-dessus crée un objet d' CAsyncSocket sur la pile.Le deuxième constructeur crée CAsyncSocket sur le tas.Le premier appel de Create ci-dessus utilise les paramètres par défaut pour créer un socket flux.Le deuxième appel de Créer crée un socket datagramme avec un port et une adresse spécifiés.(Vous pouvez utiliser l'une ou l'autre version de Créer avec l'un ou l'autre méthode de construction.)

    Les paramètres à Créer sont :

    • Un « port » : un entier court.

      Pour un socket de serveur, vous devez spécifier un port.Pour un socket client, vous recevez en général la valeur par défaut pour ce paramètre, qui permet de Windows Sockets sélectionner un port.

    • Un type de socket : SOCK_STREAM (valeur par défaut) ou SOCK_DGRAM.

    • Un socket « address », comme « ftp.microsoft.com » ou « 128.56.22.8 ».

      Il s'agit de votre adresses IP (IP) (protocole Internet) sur le réseau.Vous compterez probablement toujours sur la valeur par défaut pour ce paramètre.

    Les termes « port » et « adresse de socket » sont expliquées dans Windows Sockets : ports et adresses de socket.

  2. Si le socket est un client, connectez l'objet socket à un socket de serveur, à l'aide de CAsyncSocket::Connect.

    ou

    Si le socket est un serveur, définissez le socket pour démarrer écouter (avec CAsyncSocket::Listen) pour connectent les tentatives d'un client.Lors de la réception d'une demande de connexion, recevez-la avec CAsyncSocket::Accept.

    Après avoir reçu une connexion, vous pouvez effectuer des tâches telles que la validation des mots de passe.

    [!REMARQUE]

    La fonction membre de Accepter se réfère à un nouveau, vide objet d' CSocket comme paramètre.Vous devez construire cet objet avant d'appeler Accepter.Si cet objet socket est hors de portée, la connexion se ferme.n'appelez pas Créer pour ce nouvel objet socket.Pour obtenir un exemple, consultez l'article Windows Sockets : Séquence d'événements.

  3. Exécutez les communications avec d'autres douilles en appelant les fonctions membres de l'objet d' CAsyncSocket qui encapsulent les fonctions API Windows Sockets.

    Consultez la spécification Windows Sockets et la classe CAsyncSocket dans MFC Reference.

  4. Supprimez l'objet d' CAsyncSocket .

    Si vous avez créé l'objet socket sur la pile, le destructeur est appelé lorsque la fonction conteneur est hors de portée.Si vous avez créé l'objet socket sur le tas, à l'aide de l'opérateur new , vous êtes chargé d'utiliser l'opérateur de suppression pour détruire l'objet.

    Le destructeur appelle la fonction membre de Fermez de l'objet avant la destruction de l'objet.

Pour obtenir un exemple de cette séquence dans le code (en réalité pour un objet d' CSocket ), consultez Windows Sockets : Séquence d'événements.

Vos responsabilités avec CAsyncSocket

Lorsque vous créez un objet de classe CAsyncSocket, l'objet encapsule un handle de SOCKET windows et fournit des opérations sur ce handle.Lorsque vous utilisez CAsyncSocket, vous devez traiter tous les problèmes que vous pouvez rencontrer lors de l'utilisation de l'API directement.Par exemple :

  • « Bloquer » des scénarios.

  • Différences de marque d'ordre d'octet entre l'émission et les ordinateurs de recevoir.

  • Conversion entre Unicode et les chaînes de jeu de caractères multioctets (MBCS).

Pour les définitions de ces termes et d'informations, consultez Windows Sockets : Bloquer, Windows Sockets : L'ordre d'octet, Windows Sockets : convertir des chaînes.

Malgré ces problèmes, la classe CAsycnSocket peut être le bon choix pour votre place si votre application requiert une souplesse et vous contrôle peut obtenir.Sinon, vous devez envisager d'utiliser la classe CSocket à la place.CSocket masque de nombreuses spécifique à vous : il consomme des messages windows au cours de les appels de blocage et vous permet d'accéder à CArchive, qui gère des différences et la conversion de chaînes de marque d'ordre d'octet pour vous.

Pour plus d'informations, consultez :

Voir aussi

Concepts

Windows Sockets dans MFC