C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




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

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()); //Пересылаем
}

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