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.