MFC - Programmation Internet

Microsoft fournit de nombreuses API pour la programmation d'applications client et serveur. De nombreuses nouvelles applications sont en cours d'écriture pour Internet, et à mesure que les technologies, les capacités du navigateur et les options de sécurité changent, de nouveaux types d'applications seront créés. Votre application personnalisée peut récupérer des informations et fournir des données sur Internet.

MFC fournit une classe CSocket pour écrire des programmes de communication réseau avec Windows Sockets.

Voici une liste des méthodes de la classe CSocket.

Sr.No. Nom et description
1

Attach

Attache un handle SOCKET à un objet CSocket.

2

CancelBlockingCall

Annule un appel de blocage en cours.

3

Create

Crée une socket.

4

FromHandle

Renvoie un pointeur vers un objet CSocket, à partir d'un handle SOCKET.

5

IsBlocking

Détermine si un appel de blocage est en cours.

Examinons un exemple simple en créant une application MFS SDI.

Step 1 - Entrez MFCServer dans le champ de nom et cliquez sur OK.

Step 2 - Dans l'onglet Fonctionnalités avancées, cochez l'option sockets Windows.

Step 3 - Une fois le projet créé, ajoutez une nouvelle classe MFC CServerSocket.

Step 4 - Sélectionnez le CSocket comme classe de base et cliquez sur Terminer.

Step 5 - Ajoutez plus de classe MFC CReceivingSocket.

Step 6 - CRecevingSocket recevra les messages entrants du client.

Dans CMFCServerApp, le fichier d'en-tête comprend les fichiers suivants -

#include "ServerSocket.h"
#include "MFCServerView.h"

Step 7 - Ajoutez les deux variables de classe suivantes dans la classe CMFCServerApp.

CServerSocket m_serverSocket;
CMFCServerView m_pServerView;

Step 8 - Dans la méthode CMFCServerApp :: InitInstance (), créez le socket et spécifiez le port, puis appelez la méthode Listen comme indiqué ci-dessous.

m_serverSocket.Create(6666);
m_serverSocket.Listen();

Step 9 - Incluez le fichier d'en-tête suivant dans le fichier d'en-tête CMFCServerView.

#include "MFCServerDoc.h"

Step 10 - Remplacez la fonction OnAccept de la classe Socket.

Step 11- Sélectionnez CServerSocket dans la vue de classe et l'icône en surbrillance dans la fenêtre Propriétés. Maintenant, ajoutez OnAccept. Voici l'implémentation de la fonction OnAccept.

void CServerSocket::OnAccept(int nErrorCode) {

   // TODO: Add your specialized code here and/or call the base class
   AfxMessageBox(L"Connection accepted");
   CSocket::OnAccept(nErrorCode);
}

Step 12 - Ajout de la fonction OnReceive ().

void CServerSocket::OnReceive(int nErrorCode) { 
   
   // TODO: Add your specialized code here and/or call the base class
   AfxMessageBox(L"Data Received");
   CSocket::OnReceive(nErrorCode);
}

Step 13 - Ajout de la fonction OnReceive () dans la classe CReceivingSocket.

Cliquez avec le bouton droit sur la classe CMFCServerView dans l'explorateur de solutions et sélectionnez Ajouter → AddFunction.

Step 14 - Entrez les informations mentionnées ci-dessus et cliquez sur Terminer.

Step 15 - Ajoutez la variable CStringArray suivante dans le fichier d'en-tête CMFCServerView.

CStringArray m_msgArray;

Step 16 - Voici l'implémentation de la fonction AddMsg ().

void CMFCServerView::AddMsg(CString message) {

   m_msgArray.Add(message);
   Invalidate();
}

Step 17 - Mettez à jour le constructeur comme indiqué dans le code suivant.

CMFCServerView::CMFCServerView() {

   ((CMFCServerApp*)AfxGetApp()) -> m_pServerView = this;
}

Step 18 - Voici l'implémentation de la fonction OnDraw (), qui affiche les messages.

void CMFCServerView::OnDraw(CDC* pDC) {

   int y = 100;
   for (int i = 0; m_msgArray.GetSize(); i++) {
   
      pDC->TextOut(100, y, m_msgArray.GetAt(i));
      y += 50;
   }
   CMFCServerDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
   if (!pDoc)
      return;

   // TODO: add draw code for native data here
}

Step 19- Le côté serveur est maintenant terminé. Il recevra un message du client.

Créer une application côté client

Step 1 - Créons une nouvelle application basée sur la boîte de dialogue MFC pour l'application côté client.

Step 2 - Dans l'onglet Fonctionnalités avancées, cochez l'option sockets Windows comme indiqué ci-dessus.

Step 3 - Une fois le projet créé, concevez votre boîte de dialogue comme indiqué dans l'instantané suivant.

Step 4 - Ajouter des gestionnaires d'événements pour les boutons de connexion et d'envoi.

Step 5- Ajoutez des variables de valeur pour les trois contrôles d'édition. Pour le contrôle d'édition de port, sélectionnez le type de variable UINT.

Step 6 - Ajouter une classe MFC pour la connexion et l'envoi de messages.

Step 7- Incluez le fichier d'en-tête de la classe CClientSocket dans le fichier d'en-tête de la classe CMFCClientDemoApp et ajoutez la variable de classe. De même, ajoutez également la variable de classe dans le fichier d'en-tête CMFCClientDemoDlg.

CClientSocket m_clientSocket;

Step 8 - Voici l'implémentation du gestionnaire d'événements du bouton Connect.

void CMFCClientDemoDlg::OnBnClickedButtonConnect() {

   // TODO: Add your control notification handler code here
   UpdateData(TRUE);
   m_clientSocket.Create();
   if (m_clientSocket.Connect(m_ipAddress, m_port)) {
      AfxMessageBox(L"Connection Successfull");
   }else {
      AfxMessageBox(L"Connection Failed");
   }
   DWORD error = GetLastError();
}

Step 9 - Voici l'implémentation du gestionnaire d'événements du bouton Envoyer.

void CMFCClientDemoDlg::OnBnClickedButtonSend() {

   // TODO: Add your control notification handler code here
   UpdateData(TRUE);
   if (m_clientSocket.Send(m_message.GetBuffer(m_message.GetLength()), m_message.GetLength())) {
   
   }else {
      AfxMessageBox(L"Failed to send message");
   }
}

Step 10- Exécutez d'abord l'application Serveur, puis l'application cliente. Entrez l'adresse IP et le port de l'hôte local et cliquez sur Se connecter.

Step 11 - Vous verrez maintenant le message du côté du serveur comme indiqué dans l'instantané suivant.