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.
Шаг 1 — Введите MFCServer в поле имени и нажмите OK.
Шаг 2 — На вкладке «Дополнительные функции» установите флажок Windows Sockets.
Шаг 3 — После создания проекта добавьте новый класс MFC CServerSocket.
Шаг 4 — Выберите CSocket в качестве базового класса и нажмите Finish.
Шаг 5 — Добавьте еще класс MFC CReceivingSocket.
Шаг 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.
Шаг 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 в обозревателе решений и выберите «Добавить» → «Добавить функцию».
Шаг 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 — Теперь вы увидите сообщение на стороне сервера, как показано на следующем снимке.