Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июля!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.

Visual C++. MFC
Урок 35. Пишем клиент с использованием CSocket

На прошлом занятии мы сделали сервер. На этом занятии мы с вами сделаем клиента. Запустите Visual C++ и создайте с помощью мастера MFC AppWizard (EXE) новое основанное на диалоге приложение. Назовите проект client. На всех шагах мастера можно почти ничего не менять - установки по умолчанию нас вполне удовлетворяют. Только обязательно установите на шаге 2 поддержку Windows Sockets. Если хотите, то можете на этом же шаге мастера убрать галочки About Box и ActiveX Controls - они нам не понадобятся.

После создания заготовки разместите на форме две кнопки и edit. Для кнопок задайте идентификаторы IDC_CONNECT и IDC_SEND. Свойство Caption для них установите в Connect и Send соответственно. По первой кнопке наш клиент будет соединяться с сервером, по второй - отправлять данные, введенные пользователем в edit. Для edit'а для определенности зададим идентификатор IDC_DATA. Наша форма будет выглядеть приблизительно так:

Клиентская форма

К edit'у припишите с помощью ClassWizard'а переменную m_sData типа CString.

Теперь приступаем непосредственно к написанию кода. Добавьте в наш проект класс CMySocket. Предком этого класса выберите класс CSocket (точно также, как и для серверной части, которой мы занимались на прошлом уроке). Внутри этого класса должен быть указатель на диалоговое окно. Для создания такого указателя добавьте соответствующую переменную в public-секцию нашего класса:

public:
 
     CClientDlg* m_pDlg;

Так как мы используем класс CClientDlg, то добавьте строку

    class CClientDlg;

перед классом CMyClient.

Как и для серверной части, добавим в класс CMySocket метод, в котором для переменной m_pDlg будет задаваться некоторое значение:

void CMySocket::SetParentDlg(CClientDlg *pDlg)
 
 {
 
     m_pDlg=pDlg; //Задаем указатель на диалоговое окно
 
 }

Теперь добавляем переменную в диалоговый класс CClientDlg, в которой будет храниться экземпляр класса CMySocket:

...
 
 #include "MySocket.h"
 
 ...
 
 class CClientDlg : public CDialog
 
 {
 
 public:
 
     CMySocket m_pConnectSocket; //Передающий сокет
 
     ...

Как и для сервера, не забудьте добавить соответствующий include.

Добавьте следующий код в метод OnInitDialog класса CClientDlg:

BOOL CClientDlg::OnInitDialog()
 
 {
 
     ...
 
     // TODO: Add extra initialization here
 
     m_pConnectSocket.SetParentDlg(this);
 
     m_pConnectSocket.Create();
 
     ...
 
 }

В этом коде мы при создании диалого записываем в переменную m_pDlg класса CMySocket указатель на клиентское диалоговое окно.

Идем дальше. Добавим код, который будет выполняться при нажатии на кнопки с заголовками Connect и Send:

void CClientDlg::OnConnect()
 
 {
 
     // TODO: Add your control notification handler code here
 
     //Подсоединяемся к серверу
 
     m_pConnectSocket.Connect("127.0.0.1", 2000);
 
 }
 
 
 
 void CClientDlg::OnSend()
 
 {
 
     // TODO: Add your control notification handler code here
 
     UpdateData(TRUE); //Забираем данные из edit'а
 
     m_pConnectSocket.Send(m_sData, m_sData.GetLength()); //Пересылаем
 
 }

Все! Клиент закончен.



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS