MFC - Programmazione Internet

Microsoft fornisce molte API per la programmazione di applicazioni client e server. Si stanno scrivendo molte nuove applicazioni per Internet e, man mano che le tecnologie, le capacità del browser e le opzioni di sicurezza cambiano, verranno scritti nuovi tipi di applicazioni. La tua applicazione personalizzata può recuperare informazioni e fornire dati su Internet.

MFC fornisce una classe CSocket per scrivere programmi di comunicazione di rete con Windows Sockets.

Ecco un elenco di metodi nella classe CSocket.

Sr.No. Nome e descrizione
1

Attach

Associa un handle SOCKET a un oggetto CSocket.

2

CancelBlockingCall

Annulla una chiamata di blocco attualmente in corso.

3

Create

Crea un socket.

4

FromHandle

Restituisce un puntatore a un oggetto CSocket, dato un handle SOCKET.

5

IsBlocking

Determina se è in corso una chiamata di blocco.

Esaminiamo un semplice esempio creando un'applicazione MFS SDI.

Step 1 - Immettere MFCServer nel campo del nome e fare clic su OK.

Step 2 - Nella scheda Funzionalità avanzate, seleziona l'opzione Windows socket.

Step 3 - Una volta creato il progetto, aggiungi una nuova classe MFC CServerSocket.

Step 4 - Seleziona CSocket come classe base e fai clic su Fine.

Step 5 - Aggiungere più CReceivingSocket di classe MFC.

Step 6 - CRecevingSocket riceverà i messaggi in arrivo dal client.

In CMFCServerApp, il file di intestazione include i seguenti file:

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

Step 7 - Aggiungere le seguenti due variabili di classe nella classe CMFCServerApp.

CServerSocket m_serverSocket;
CMFCServerView m_pServerView;

Step 8 - Nel metodo CMFCServerApp :: InitInstance (), creare il socket e specificare la porta, quindi chiamare il metodo Listen come mostrato di seguito.

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

Step 9 - Includere il seguente file di intestazione nel file di intestazione CMFCServerView.

#include "MFCServerDoc.h"

Step 10 - Ignora la funzione OnAccept dalla classe Socket.

Step 11- Seleziona CServerSocket nella visualizzazione classi e l'icona evidenziata nella finestra Proprietà. Ora aggiungi su Accetta. Ecco l'implementazione della funzione 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 - Aggiungi la funzione 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 - Aggiungi la funzione OnReceive () nella classe CReceivingSocket.

Fare clic con il pulsante destro del mouse sulla classe CMFCServerView in Esplora soluzioni e selezionare Aggiungi → Aggiungi funzione.

Step 14 - Immettere le informazioni di cui sopra e fare clic su Fine.

Step 15 - Aggiungere la seguente variabile CStringArray nel file di intestazione CMFCServerView.

CStringArray m_msgArray;

Step 16 - Ecco l'implementazione della funzione AddMsg ().

void CMFCServerView::AddMsg(CString message) {

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

Step 17 - Aggiorna il costruttore come mostrato nel codice seguente.

CMFCServerView::CMFCServerView() {

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

Step 18 - Ecco l'implementazione della funzione OnDraw (), che visualizza i messaggi.

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- Il lato server è ora completo. Riceverà un messaggio dal client.

Crea applicazione lato client

Step 1 - Creiamo una nuova applicazione basata sulla finestra di dialogo MFC per l'applicazione lato client.

Step 2 - Nella scheda Funzionalità avanzate, seleziona l'opzione Windows socket come mostrato sopra.

Step 3 - Una volta creato il progetto, progetta la tua finestra di dialogo come mostrato nell'istantanea seguente.

Step 4 - Aggiungi gestori di eventi per i pulsanti Connetti e Invia.

Step 5- Aggiungi variabili di valore per tutti e tre i controlli di modifica. Per il controllo della modifica della porta, selezionare il tipo di variabile UINT.

Step 6 - Aggiungi classe MFC per la connessione e l'invio di messaggi.

Step 7- Includere il file di intestazione della classe CClientSocket nel file di intestazione della classe CMFCClientDemoApp e aggiungere la variabile di classe. Allo stesso modo, aggiungi anche la variabile di classe nel file di intestazione CMFCClientDemoDlg.

CClientSocket m_clientSocket;

Step 8 - Ecco l'implementazione del gestore di eventi del pulsante 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 - Ecco l'implementazione del gestore di eventi del pulsante Invia.

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- Eseguire prima l'applicazione Server e poi l'applicazione client. Immettere l'ip e la porta dell'host locale e fare clic su Connetti.

Step 11 - Ora vedrai il messaggio sul lato Server come mostrato nella seguente istantanea.