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.
