- •Визуальные средства разработки приложений
- •Содержание
- •Лабораторная работа № 1 Использование технологии ole db
- •1.1.Наиболее важные технологии сом
- •1.2. Единообразная передача данных и объекты с подключением
- •1.Методические указания
- •Лабораторная работа №2 Построение приложения с использованием компонентов ActiveX
- •2.1. Управляющие элементы ActiveX
- •2.2. Методические указания
- •Лабораторная работа №3 Использование потоков в приложении
- •3.1.Потоковая многозадачность
- •3.2.Потоки mfc
- •3.3. Синхронизация потоков
- •3.4. Методические указания
- •3.4.1. Создание рабочего потока
- •3.4.2.Остановка и возобновление выполнения потоков
- •3.4.3. Управление приоритетами потоков
- •3.4.4.Синхронизация потоков
- •3.4.5.Работа с семафорами
- •3.4.6.Работа с объектами событий
- •3.4.7 Использование критической секции
- •3.4.8 Использование исключающего семафора
- •Варианты индивидуального задания
- •Лабораторная работа №4 Программирование для Интернета с использованием Windows Sockets
- •4.1. Сокеты, порты, адреса
- •4.2. Модель клиент - сервер
- •Связь клиент - сервер
- •4.3. Класс cAsyncSocket
- •4.4. Создание сетевого приложения
- •4.4.1. Создание каркаса приложения
- •4.4.2.Функции класса cAsyncSocket Class
- •Задание к лабораторной работе
- •Варианты индивидуального задания
- •Литература
- •220027, Минск, ул. П. Бровки, 6
4.4.1. Создание каркаса приложения
Создаем новый MFC-проект с помощью мастера приложений AppWisard и даем этому проекту имя, например, Sock. На первом шаге указывается, что приложение будет диалоговым, на втором шаге не забываем указать, что приложение будет использовать поддержку для Windows Socket. Далее выбираем кнопку Finish.
Внешний вид окна и начальные действия
После того как создан каркас приложения, приступаем к созданию внешнего вида окна. Здесь нужно создать набор радиокнопок, с помощью которых можно установить параметры приложения, а именно, является ли данная копия приложения клиентской или серверной. Затем нам понадобится пара окон для редактирования текста, в которых мы будем указывать имя компьютера и номер порта, на котором будет слушать сервер. Нам нужна командная кнопка, которая будет заставлять сервер приступать к прослушиванию на сокете или же заставлять клиента устанавливать соединение с сервером, а также кнопка, которая позволит закрывать соединение. Кроме того, нам понадобится окно для редактирования текста, в которое мы будем вводить сообщение, предназначенное для передачи другому приложению, и кнопка, которая будет осуществлять такую передачу.
Наконец, нужно иметь пару окон для списка, в которые будут помещаться переданные и полученные сообщения. Расположим все эти элементы управления в соответствии с тем, как показано на рис.4.1, а свойства элементов управления зададим в соответствии с табл.4.2.
Р
ис.4.1.
Расположение элементов управления
Таблица 4.2
Параметры элементов управления
Объект |
Свойства |
Значение |
1 |
2 |
3 |
Group Box |
ID |
IDC_STATICTYPE |
|
Caption |
Socket Type |
RadioButton |
ID |
IDC_RCLIENT |
|
Caption |
&Client |
|
Group |
Checked |
RadioButton |
ID |
IDC_RSERVER |
|
Caption |
&Server |
Static Text |
ID |
IDC_STATICNAME |
|
Caption |
Server &Name: |
Edit Box |
ID |
IDC_ESERVNAME |
Static Text |
ID |
IDC_STATICPORT |
|
Caption |
Server &Port: |
Edit Box |
ID |
IDC_ESERVPORT |
Command Button |
ID |
IDC_BCONNECT |
|
Caption |
C&onnect |
Command Button |
ID |
IDC_BCLOSE |
|
Caption |
C&lose |
|
Disabled |
Checked |
Static Text |
ID |
IDC_STATICMSG |
|
Caption |
&Message: |
|
Disabled |
Checked |
Edit Box |
ID |
IDC_EMSG |
|
Disabled |
Checked |
Command Button |
ID |
IDC_BSEND |
|
Caption |
S&end |
|
Disabled |
Checked |
Static Text |
ID |
IDC_STATIC |
|
Caption |
Sent: |
List Box |
ID |
I
Окончание
табл.4.2 |
|
Tab Stop |
Unchecket |
1 |
2 |
3 |
|
Selection |
None |
Static Text |
ID |
IDC_STATIC |
|
Caption |
Received: |
List Box |
ID |
IDC_LRECVD |
|
Tab Stop |
Unchecket |
|
Sort |
Unchecket |
|
Selection |
None |
После того как основа диалогового окна сконструирована, открываем «Матер классов» и создаем переменные для элементов контроля в соответствии с переменными элементов управления (табл.4.3).
Таблица 4.3
Переменные элементов управления
Объект |
Имя |
Категория |
Тип |
IDC_BCONNECT |
m_ctlConnect |
Control |
CButton |
IDC_EMSG |
m_strMessage |
Value |
CString |
IDC_ESERVNAME |
m_strName |
Value |
CString |
IDC_ESERVPORT |
m_iPort |
Value |
int |
IDC_LRECVD |
m_ctlRecvd |
Control |
CListBox |
IDC_LSENT |
m_ctlSent |
Control |
CListBox |
IDC_RCLIENT |
m_iType |
Value |
int |
Чтобы иметь возможность использовать кнопку CONNECT повторно и поставить приложение-сервер "прослушивать" в ожидании соединения, нужно вставить функцию к радиокнопкам; текст, изображаемый на командной кнопке, зависит от того, какая выбрана радиокнопка. Чтобы вставить требуемую функцию, соответствующую сообщению о событии BN_CLICKED для идентификатора IDC_RCLIENT, используем имя функции OnRType. Вставим такую же функцию для события BN_CLICKED для элемента управления с идентификатором IDC_RSERVER. Функция имеет вид:
void CSockDlg::OnRType()
{
//Синхронизируем элементы управления в соответствии с переменными
UpdateDate(TRUE);
//В каком мы режиме?
if (m_iType == 0) //Устанавливаем текст на кнопке
m_ctlConnect.SetWindowText("C&onnect");
else
m_ctlConnect.SetWindowText("&Listen");}
Если сейчас скомпилировать и запустить приложение, можно будет выбирать режим работы приложения с помощью двух кнопок, а текст, появляющийся на командной кнопке, будет меняться в зависимости от того, какой установлен режим.
