Partager via


Windows Sockets : Ordre des opérations

Cet article indique, côte à côte, la séquence d'événements pour un socket de serveur et un socket client.Étant donné que les sockets utilisent des objets d' CArchive , ils sont nécessairement sockets flux.

Séquence d'événements pour une communication de socket flux

Jusqu ' à le point de construire un objet d' CSocketFile , la séquence suivante est exacte (avec certaines différences de paramètre) pour CAsyncSocket et CSocket.À partir de là, la séquence est strictement pour CSocket.Le tableau ci-après répertorie l'ordre des opérations pour configurer la communication entre un client et un serveur.

Communication d'installation entre un serveur et un client

Serveur

Client

// construct a socket

CSocket sockSrvr;

// construct a socket

CSocket sockClient;

// create the SOCKET

sockSrvr.Create(nPort);1,2

// create the SOCKET

sockClient.Create( );2

// start listening

sockSrvr.Listen( );

 

 

// seek a connection

sockClient.Connect(strAddr, nPort);3,4

// construct a new, empty socket

CSocket sockRecv;

// accept connection

sockSrvr.Accept( sockRecv ); 5

 

// construct file object

CSocketFile file(&sockRecv);

// construct file object

CSocketFile file(&sockClient);

// construct an archive

CArchive arIn(&file, CArchive::load);

ou

CArchive arOut(&file,CArchive::store);

– ou les deux ) 

// construct an archive

CArchive arIn(&file, CArchive::load);

ou

CArchive arOut(&file,CArchive::store);

 – ou les deux ) 

// use the archive to pass data:

arIn >> dwValue;

ou

arOut << dwValue;6

// use the archive to pass data:

arIn >> dwValue;

ou

arOut << dwValue;6

1.Où nPort est un numéro de port.Consultez Windows Sockets : ports et adresses de socket pour plus d'informations sur les ports.

2.Le serveur doit toujours spécifier un port pour que les clients peuvent se connecter.L'appel de Créer spécifie parfois une adresse.Côté client, utilisez les paramètres par défaut, qui demandent aux MFC d'utiliser le port disponible.

3.Où nPort est un numéro de port et un strAddr est une adresse d'ordinateur ou un adresses IP (protocole Internet (IP)).

4.Les adresses d'ordinateur peuvent prendre plusieurs formes : « ftp.microsoft.com », « microsoft.com ».Les adresses IP utilisent la forme « 127.54.67.32 » de « nombre de valeurs séparées par des points ».Les contrôles de test de Se connecter pour voir si l'adresse est un nombre séparées par des points (bien qu'il ne vérifie pas pour garantir le nombre est un ordinateur valide sur le réseau).Sinon, Se connecter suppose un nom de l'ordinateur de l'un des autres formulaires.

5.Lorsque vous appelez Accepter côté serveur, vous passez une référence à un objet socket.Vous devez construire cet objet d'abord, mais n'appelez pas Créer pour lui.Pensez que si cet objet socket est hors de portée, la connexion se ferme.MFC connecte le nouvel objet à un handle de SOCKET .Vous pouvez construire le socket sur la pile, comme indiqué, ou sur le tas.

6.L'archive et le fichier de socket sont fermés lorsqu'elles sont hors de portée.Le destructeur de l'objet socket appelle également la fonction membre de Fermez pour l'objet socket lorsque l'objet est hors de portée ou supprimé.

Remarques supplémentaires sur la séquence

La séquence d'appels présentés dans le tableau précédent concerne un socket flux.Sockets datagramme, qui sont sans connexion, n'exigent pas CAsyncSocket::Connect, écoutez, et les appels d' Acceptez (même si vous pouvez éventuellement utiliser Se connecter).À la place, si vous utilisez la classe CAsyncSocket, sockets datagramme utilisent les fonctions membres d' CAsyncSocket::SendTo et d' ReceiveFrom .(Si vous utilisez Se connecter avec un socket datagramme, vous utilisez Envoyer et Receive.) Étant donné qu' CArchive ne fonctionne pas avec les datagrammes, n'utilisez pas CSocket avec une archive si le socket est un datagramme.

CSocketFile ne prend pas en charge toutes les fonctionnalités des CFile ; les membres d' CFile tels qu' Seek, qui ne sont pas justifiée pour une communication de socket, ne sont pas disponibles.De ce fait, certaines fonctions MFC Serialize par défaut ne sont pas compatibles avec CSocketFile.c'est particulièrement vrai de la classe d' CEditView .Vous ne devez pas essayer de la sérialisation des données d' CEditView via un objet d' CArchive attaché à un objet d' CSocketFile à l'aide de CEditView::SerializeRaw; utilisation CEditView::Serialize à la place (non documenté).La fonction de SerializeRaw s'attend à ce que le fichier objet possède des fonctions, telles qu' Seek, qu' CSocketFile ne prend pas en charge.

Pour plus d'informations, consultez :

Voir aussi

Référence

CSocket, classe

CAsyncSocket::Create

CAsyncSocket::Close

Concepts

Windows Sockets dans MFC