MFC - programowanie internetowe

Firma Microsoft udostępnia wiele interfejsów API do programowania aplikacji klienckich i serwerowych. Wiele nowych aplikacji jest tworzonych dla Internetu, a wraz ze zmianą technologii, możliwości przeglądarek i opcji bezpieczeństwa zostaną napisane nowe typy aplikacji. Twoja niestandardowa aplikacja może pobierać informacje i udostępniać dane w Internecie.

MFC udostępnia klasę CSocket do pisania programów komunikacji sieciowej za pomocą Windows Sockets.

Oto lista metod w klasie CSocket.

Sr.No. Nazwa i opis
1

Attach

Dołącza uchwyt SOCKET do obiektu CSocket.

2

CancelBlockingCall

Anuluje trwające połączenie blokujące.

3

Create

Tworzy gniazdo.

4

FromHandle

Zwraca wskaźnik do obiektu CSocket, mając uchwyt SOCKET.

5

IsBlocking

Określa, czy trwa połączenie blokujące.

Spójrzmy na prosty przykład, tworząc aplikację MFS SDI.

Step 1 - Wpisz MFCServer w polu nazwy i kliknij OK.

Step 2 - Na karcie Funkcje zaawansowane zaznacz opcję Gniazda systemu Windows.

Step 3 - Po utworzeniu projektu dodaj nową klasę MFC CServerSocket.

Step 4 - Wybierz CSocket jako klasę bazową i kliknij Zakończ.

Step 5 - Dodaj więcej CReceivingSocket klasy MFC.

Step 6 - CRecevingSocket będzie otrzymywać wiadomości przychodzące od klienta.

W CMFCServerApp plik nagłówkowy zawiera następujące pliki -

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

Step 7 - Dodaj następujące dwie zmienne klasy w klasie CMFCServerApp.

CServerSocket m_serverSocket;
CMFCServerView m_pServerView;

Step 8 - W metodzie CMFCServerApp :: InitInstance () utwórz gniazdo i określ port, a następnie wywołaj metodę Listen, jak pokazano poniżej.

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

Step 9 - Dołącz następujący plik nagłówkowy do pliku nagłówkowego CMFCServerView.

#include "MFCServerDoc.h"

Step 10 - Zastąp funkcję OnAccept z klasy Socket.

Step 11- Wybierz CServerSocket w widoku klasy i podświetloną ikonę w oknie Właściwości. Teraz Add OnAccept. Oto implementacja funkcji 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 - Dodaj funkcję 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 - Dodaj funkcję OnReceive () w klasie CReceivingSocket.

Kliknij prawym przyciskiem myszy klasę CMFCServerView w eksploratorze rozwiązań i wybierz opcję Dodaj → AddFunction.

Step 14 - Wprowadź powyższe informacje i kliknij Zakończ.

Step 15 - Dodaj następującą zmienną CStringArray w pliku nagłówkowym CMFCServerView.

CStringArray m_msgArray;

Step 16 - Oto implementacja funkcji AddMsg ().

void CMFCServerView::AddMsg(CString message) {

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

Step 17 - Zaktualizuj konstruktora, jak pokazano w poniższym kodzie.

CMFCServerView::CMFCServerView() {

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

Step 18 - Oto implementacja funkcji OnDraw (), która wyświetla komunikaty.

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- Strona serwera jest teraz kompletna. Otrzyma wiadomość od klienta.

Utwórz aplikację po stronie klienta

Step 1 - Stwórzmy nową aplikację opartą na dialogu MFC dla aplikacji po stronie klienta.

Step 2 - Na karcie Funkcje zaawansowane zaznacz opcję Gniazda systemu Windows, jak pokazano powyżej.

Step 3 - Po utworzeniu projektu zaprojektuj okno dialogowe, jak pokazano na poniższej migawce.

Step 4 - Dodaj programy obsługi zdarzeń dla przycisków Połącz i Wyślij.

Step 5- Dodaj zmienne wartości dla wszystkich trzech kontrolek edycji. Aby sterować edycją portu, wybierz typ zmiennej UINT.

Step 6 - Dodaj klasę MFC do łączenia i wysyłania wiadomości.

Step 7- Dołącz plik nagłówkowy klasy CClientSocket do pliku nagłówkowego klasy CMFCClientDemoApp i dodaj zmienną klasy. Podobnie dodaj zmienną klasy w pliku nagłówkowym CMFCClientDemoDlg.

CClientSocket m_clientSocket;

Step 8 - Oto implementacja obsługi zdarzeń przycisku 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 - Oto implementacja obsługi zdarzeń przycisku Wyślij.

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- Najpierw uruchom aplikację serwera, a następnie aplikację kliencką. Wprowadź adres IP i port lokalnego hosta i kliknij Połącz.

Step 11 - Teraz zobaczysz komunikat po stronie serwera, jak pokazano na poniższej migawce.