Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Windows Sockets : utilisation de la classe
Cet article explique comment utiliser la classe CAsyncSocket. Cette classe encapsule l’API Windows Sockets à un niveau très bas.
CAsyncSocket est utilisé par les programmeurs qui connaissent les communications réseau en détail, mais veulent la commodité des rappels pour la notification des événements réseau. En fonction de cette hypothèse, cet article fournit uniquement des instructions de base. Vous devez probablement envisager d’utiliser CAsyncSocket si vous souhaitez que Windows Sockets traite facilement plusieurs protocoles réseau dans une application MFC, mais ne souhaitez pas sacrifier la flexibilité. Vous pouvez également sentir que vous pouvez obtenir une meilleure efficacité en programmant les communications plus directement vous-même que vous pourriez utiliser le modèle de remplacement plus général de classe CSocket.
CAsyncSocket est documenté dans la référence MFC. Visual C++ fournit également la spécification windows Sockets, située dans le Kit de développement logiciel (SDK) Windows. Les détails sont laissés à vous. Visual C++ ne fournit pas d’exemple d’application pour CAsyncSocket.
Si vous ne connaissez pas très bien les communications réseau et souhaitez une solution simple, utilisez une classe CSocket avec un CArchive objet. Pour plus d’informations , consultez Windows Sockets : Utilisation de sockets avec archives .
Cet article traite des sujets suivants :
Création et utilisation d’un
CAsyncSocketobjet.
Création et utilisation d’un CAsyncSocket
Pour utiliser CAsyncSocket
Construisez un
CAsyncSocketobjet et utilisez l’objet pour créer le handle sous-jacentSOCKET.La création d’un socket suit le modèle MFC de la construction en deux étapes.
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
CAsyncSocketobjet sur la pile. Le deuxième constructeur crée unCAsyncSocketsegment sur le tas. Le premierCreateappel ci-dessus utilise les paramètres par défaut pour créer un socket de flux. Le deuxièmeCreateappel crée un socket de datagramme avec un port et une adresse spécifiés. (Vous pouvez utiliser l’une ou l’autreCreateversion avec l’une ou l’autre méthode de construction.)Les paramètres à définir
Createsont les suivants :Un « port » : entier court.
Pour un socket de serveur, vous devez spécifier un port. Pour un socket client, vous acceptez généralement la valeur par défaut de ce paramètre, ce qui permet aux sockets Windows de sélectionner un port.
Type de socket :
SOCK_STREAM(valeur par défaut) ouSOCK_DGRAM.Une « adresse » de socket telle que
"ftp.microsoft.com"ou"128.56.22.8".Il s’agit de votre adresse IP (Internet Protocol) sur le réseau. Vous allez probablement toujours compter sur la valeur par défaut de ce paramètre.
Les termes « port » et « adresse de socket » sont expliqués dans Windows Sockets : ports et adresses de socket.
Si le socket est un client, connectez l’objet socket à un socket de serveur à l’aide
CAsyncSocket::Connectde .- ou -
Si le socket est un serveur, définissez le socket pour commencer à écouter (avec
CAsyncSocket::Listen) les tentatives de connexion à partir d’un client. Lors de la réception d’une demande de connexion, acceptez-la avecCAsyncSocket::Accept.Après avoir accepté une connexion, vous pouvez effectuer des tâches telles que la validation des mots de passe.
Remarque
La
Acceptfonction membre prend une référence à un nouvel objet videCSocketcomme paramètre. Vous devez construire cet objet avant d’appelerAccept. Si cet objet socket est hors de portée, la connexion se ferme. N’appelezCreatepas ce nouvel objet socket. Pour obtenir un exemple, consultez l’article Windows Sockets : Séquence d’opérations.Effectuez des communications avec d’autres sockets en appelant les fonctions membres de l’objet
CAsyncSocketqui encapsulent les fonctions de l’API Windows Sockets.Consultez la spécification et la classe
CAsyncSocketWindows Sockets dans la référence MFC.Détruisez l’objet
CAsyncSocket.Si vous avez créé l’objet socket sur la pile, son destructeur est appelé lorsque la fonction conteneur sort de l’étendue. Si vous avez créé l’objet socket sur le tas, à l’aide de l’opérateur
new, vous êtes responsable de l’utilisation de l’opérateurdeletepour détruire l’objet.Le destructeur appelle la fonction membre de l’objet
Closeavant de détruire l’objet.
Pour obtenir un exemple de cette séquence dans le code (en fait pour un CSocket objet), consultez Windows Sockets : Séquence d’opérations.
Vos responsabilités avec CAsyncSocket
Lorsque vous créez un objet de classe CAsyncSocket, l’objet encapsule un handle Windows SOCKET et fournit des opérations sur ce handle. Lorsque vous utilisez CAsyncSocket, vous devez traiter tous les problèmes que vous pouvez rencontrer si vous utilisez directement l’API. Par exemple:
Scénarios de « blocage ».
Différences d’ordre d’octet entre les machines d’envoi et de réception.
Conversion entre des chaînes de jeu de caractères Unicode et multioctets (MBCS).
Pour obtenir des définitions de ces termes et des informations supplémentaires, consultez Windows Sockets : Blocage, Windows Sockets : Ordre d’octets, Sockets Windows : Conversion de chaînes.
Malgré ces problèmes, la classe CAsyncSocket peut être le bon choix pour vous si votre application nécessite toute la flexibilité et le contrôle que vous pouvez obtenir. Si ce n’est pas le cas, envisagez d’utiliser la classe CSocket à la place.
CSocket masque de nombreux détails : il pompe les messages Windows pendant les appels bloquants et vous donne accès à CArchive, qui gère les différences d’ordre d’octet et la conversion de chaînes pour vous.
Pour plus d’informations, consultez :