пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Создание сетевого приложения. Функции обработки событий для класса сокета.

 

 

Функции  класса CAsyncSocket Class

Чтобы иметь возможность перехватывать и отвечать на события сокета, нам нужно создать свой собственный класс на основе класса CAsyncSocket. В этом классе будет содержаться его собственная версия функций для обработки событий, а также средства отражения событий на уровне класса диалогового окна, здесь будет использоваться указатель на диалоговое окно родительского класса нашего класса сокета. Этот указатель будет использоваться для осуществления вызова функций каждого события сокета, предварительно осуществим проверку наличия ошибок. Чтобы создать этот класс, выберем в меню Insert | New Class. В диалоговом меню создания нового класса New Class оставим тип класса таким, какой предлагается по умолчанию (MFC), введем имя класса, например, CMySocket, и укажем в качестве базового класса CAsyncSocket в списке доступных базовых классов. Нажимаем кнопку ОК, новый класс вставлен.

После того, как новый класс сокета создан, вставим переменную в класс, который будет использоваться в качестве указателя на родительское диалоговое окно. Указываем тип переменной CDialog*, имя переменной m_pWnd, доступ private. В классе необходимо определить метод, а значит, вставим новую функцию в этот класс. Тип функции void, объявим функцию в виде SetParent(CDialog* pWnd), доступ public. Редактируем созданную функцию.

 

void CMySocket::SetParent(CDialog *pWnd)

зн

//устанавливаем указатель

m_pWnd = pWnd;

нз

 

В классе сокета создаем функции обработки событий. Для создания функции, соответствующей событию OnAccept, вставим новую функцию в класс сокета, тип функции void, опишем функцию в виде OnAccept(int nErrorCode), доступ protected. Редактируем код.

 

void CMySocket::OnAccept(int nErrorCode)

зн

//Есть ошибки?

if (nError == 0)

//Нет, вызываем функцию OnAccept()

((CSockDlg*)m_pWnd)->OnAccept();

зн

 

Вставляем подобные функции для событий OnConnect, OnClose, OnReceive и OnSend. после того, как функции вставлены,нужно вставить заголовочный файл в диалоговое окно нашего приложения в класс сокета.

 

//MySocket.cpp

//

#include "MySocket.h"

 

После того, как требуемые функции событий созданы в классе сокета, вставим переменную,связанную с нашим классом сокета в класс диалогового окна. Для сервера нам потребуется две переменные, одна будет связана с прослушиванием запросов на соединение, а другая - связана с другим приложением. Поскольку у нас существует два объекта сокета, то в диалоговый класс (CSockDlg) вводим две переменные. Обе переменные имеют тип класс сокета (CMySocket) и доступ private. Имя одной переменной m_sListenSocket, эта переменная связана с прослушиванием запроса на соединение, вторая переменная называется, m_sConnectSocket и используется для пересылки сообщения в том и в другом направлении.

После того, как переменная сокета созданы, необходимо написать код, инициализирующий эти переменные. По умолчанию зададим тип приложения, как "клиент", номер порта 4000. Помимо этих параметров установим указатель в объектах сокетов, чтобы они указывали на диалоговый класс. Это можно сделать, если вставить код в функцию OnInitDialog.

Замечание: Имя, соответствующее loopback,-это специальное имя, используемое в протоколе TCP/IP, которое обозначает компьютер, на котором мы работаем. Это внутреннее имя компьютера, превращаемое в адрес 127.0.0.1. Это имя и адрес компьютера, широко используемое в тех случаях, когда требуется осуществить соединение с другим приложением, установленным на том же самом компьютере, на котором мы и работаем.

 

BOOL  CSockDlg::OnInitDialog()

зн

CDialog::OnInitDialog();

//…

SetIcon(m_hIcon, FALSE);

//Инициализируем переменные управления

m_iType = 0;

m_strName = "loopback";

m_iPort = 4000;

//обновляем элементы управления

UpDateData(FALSE);

//Устанавливаем указатель

m_sConnectSocket.SetParent(this);

m_sListenSocket.SetParent(this);

retutn TRUE;      //зн

 


18.01.2020; 23:01
хиты: 60
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь