Учебники

MFC — интернет-программирование

Microsoft предоставляет множество API для программирования как клиентских, так и серверных приложений. Многие новые приложения пишутся для Интернета, и по мере изменения технологий, возможностей браузера и параметров безопасности будут создаваться новые типы приложений. Ваше пользовательское приложение может получать информацию и предоставлять данные в Интернете.

MFC предоставляет класс CSocket для написания сетевых коммуникационных программ с Windows Sockets.

Вот список методов в классе CSocket.

Sr.No. Имя и описание
1

Прикреплять

Присоединяет дескриптор SOCKET к объекту CSocket.

2

CancelBlockingCall

Отменяет блокирующий вызов, который в данный момент выполняется.

3

Создайте

Создает сокет.

4

FromHandle

Возвращает указатель на объект CSocket с заданным дескриптором SOCKET.

5

IsBlocking

Определяет, выполняется ли блокирующий вызов.

Прикреплять

Присоединяет дескриптор SOCKET к объекту CSocket.

CancelBlockingCall

Отменяет блокирующий вызов, который в данный момент выполняется.

Создайте

Создает сокет.

FromHandle

Возвращает указатель на объект CSocket с заданным дескриптором SOCKET.

IsBlocking

Определяет, выполняется ли блокирующий вызов.

Давайте рассмотрим простой пример, создав приложение MFS SDI.

MFCServer

Шаг 1 — Введите MFCServer в поле имени и нажмите OK.

MFCServer

Шаг 2 — На вкладке «Дополнительные функции» установите флажок Windows Sockets.

Шаг 3 — После создания проекта добавьте новый класс MFC CServerSocket.

MFCServer

Шаг 4 — Выберите CSocket в качестве базового класса и нажмите Finish.

Шаг 5 — Добавьте еще класс MFC CReceivingSocket.

MFCServer

Шаг 6 — CRecevingSocket будет получать входящие сообщения от клиента.

В CMFCServerApp заголовочный файл содержит следующие файлы:

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

Шаг 7 — Добавьте следующие две переменные класса в класс CMFCServerApp.

CServerSocket m_serverSocket;
CMFCServerView m_pServerView;

Шаг 8 — В методе CMFCServerApp :: InitInstance () создайте сокет и укажите порт, а затем вызовите метод Listen, как показано ниже.

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

Шаг 9 — Включите следующий заголовочный файл в заголовочный файл CMFCServerView.

#include "MFCServerDoc.h"

Шаг 10 — Переопределите функцию OnAccept из класса Socket.

MFCServer

Шаг 11 — Выберите CServerSocket в представлении класса и выделенный значок в окне свойств. Теперь добавьте OnAccept. Вот реализация функции 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);
}

Шаг 12 — Добавьте функцию 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);
}

Шаг 13 — Добавьте функцию OnReceive () в класс CReceivingSocket.

Щелкните правой кнопкой мыши класс CMFCServerView в обозревателе решений и выберите «Добавить» → «Добавить функцию».

MFCServer

Шаг 14 — Введите вышеупомянутую информацию и нажмите Готово.

Шаг 15 — Добавьте следующую переменную CStringArray в заголовочный файл CMFCServerView.

CStringArray m_msgArray;

Шаг 16 — Вот реализация функции AddMsg ().

void CMFCServerView::AddMsg(CString message) {

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

Шаг 17 — Обновите конструктор, как показано в следующем коде.

CMFCServerView::CMFCServerView() {

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

Шаг 18 — Вот реализация функции OnDraw (), которая отображает сообщения.

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
}

Шаг 19 — Серверная часть теперь завершена. Он получит сообщение от клиента.

Создать клиентское приложение

Шаг 1 — Давайте создадим новое диалоговое приложение MFC для клиентского приложения.

Сторона клиента

Сторона клиента

Шаг 2 — На вкладке «Дополнительные функции» установите флажок Windows Sockets, как показано выше.

Шаг 3. После создания проекта создайте диалоговое окно, как показано на следующем снимке.

Сторона клиента

Шаг 4 — Добавьте обработчики событий для кнопок Connect и Send.

Шаг 5 — Добавьте переменные значения для всех трех элементов управления редактирования. Для управления редактированием порта выберите тип переменной UINT.

Сторона клиента

Шаг 6 — Добавьте класс MFC для подключения и отправки сообщений.

Сторона клиента

Шаг 7. Включите заголовочный файл класса CClientSocket в заголовочный файл класса CMFCClientDemoApp и добавьте переменную класса. Аналогичным образом добавьте переменную класса в заголовочный файл CMFCClientDemoDlg.

CClientSocket m_clientSocket;

Шаг 8 — Вот реализация обработчика события кнопки 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();
}

Шаг 9 — Вот реализация обработчика события кнопки «Отправить».

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");
   }
}

Шаг 10 — Сначала запустите приложение сервера, а затем клиентское приложение. Введите IP-адрес и порт локального хоста и нажмите «Подключиться».

Сторона клиента

Шаг 11 — Теперь вы увидите сообщение на стороне сервера, как показано на следующем снимке.