Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 1381

.pdf
Скачиваний:
3
Добавлен:
30.04.2022
Размер:
1.08 Mб
Скачать

4)ожидать соединения по указанному порту, а после установления соединения передавать клиенту строку, прочитанную из произвольного файла.

5)ожидать соединения по указанному порту, после установления соединения ожидать от клиента определенную строку символов, и после ее получения разрывать соединение.

6)ожидать соединения по указанному порту, после установления соединения ожидать от клиента произвольную строку символов, и, получив строку, возвращать ее клиенту.

Контрольные вопросы

1.Что такое сокет?

2.Какие параметры характеризуют сокет?

3.Нарисуйте общую схему построения сервера.

4.Как сервер готовится к установлению соединения?

5.Нарисуйте общую схему построения клиента.

6.Как осуществляется процесс установления соедине-

ния?

9

Практическое занятие №2 Разработка клиент-серверных приложений на основе

механизма сокетов с применением протокола UDP

Цель практического занятия Изучить механизм сокетов и освоить разработку кли-

ент-серверных программ обмена данными на основе протокола UDP, получить практические навыки по разработке сетевых программ на языках С, С++.

Теоретические сведения

Протокол UDP используется в тех случаях, когда требуется передать данные без установления соединения. Такая связь в принципе не надежна, так как отправителю не сообщается, правильно ли принято его сообщение и получено ли оно вообще.

Данные, отправляемые прикладным процессом через UDP, достигают места назначения как единое целое, не дробясь на части. Например, если процесс-отправитель передал пять сообщений через порт, то и процесс получатель должен считать из порта пять сообщений. Размер каждого записанного сообщения должен совпадать с размером каждого прочитанного.

Общая схема применения сокетов в не ориентированном на соединение протоколе показана на рис. 2.1.

Не ориентированный на соединение сервер на рис. 2.1вызывает функции socket и bind так же, как и сервер, ориентированный на соединение. Но поскольку образованный сокет не соединен, для чтения данных программа-клиент использует функцию recvfrom вместо обычных recv или read. Обратите внимание на то, что программа-клиент, изображенная на рис. 2, вызывает функцию bind, но не вызывает connect. Не ориентированные на соединение протоколы не устанавливают никакого предварительного соединения между

10

конечными точками сети. Вместо этого для передачи данных используется функция sendto, требующая от программы указать адрес назначения сообщения в качестве одного из аргументов.

Рис. 2. Сокеты в не ориентированном на соединение протоколе

Функция recvfrom также не ожидает соединения. Она обрабатывает любые данные, появившиеся на связанном с ней порту протокола. Получив датаграмму из сокета, функция recvfrom записывает как ее содержимое, так и сетевой адрес, с которого она получена. Программы, серверы и клиенты используют сетевой адрес для идентификации процесса передатчика или приемника датаграммы. Как и положено, сервер посылает ответную дата-грамму по адресу, ранее извлеченному функцией recvfrom из пришедшей датаграммы.

11

Типовые варианты заданий

Типовые варианты заданий на занятии аналогичны предыдущим (см. практическую работу №1) с учётом отсутствия соединения.

Контрольные вопросы

1.Нарисуйте общую схему построения сервера, не ориентированного на соединение.

2.Нарисуйте общую схему построения клиента, не ориентированного на соединение.

3.В чём различие процессов обмена данными по протоколам UDP и TCP?

4.Что означают термины little-endian и big-endian?

5.Как программируется передача параметров вызываемой программе?

12

Практическое занятие №3 Разработка клиент-серверных приложений

с применением протокола RPC

Цель практического занятия

Изучить механизм удалённого вызова процедур (RPC) и освоить разработку клиент-серверных программ обмена данными на основе протокола RPC, получить практические навыки по разработке сетевых программ на языках С, С++.

Теоретические сведения

При использовании протокола RPC клиентская процедура выполняет обычный (то есть локальный) вызов клиентской заглушки, имеющей то же имя, что и серверная процедура. Поскольку клиентская процедура и клиентская заглушка существуют в одном и том же адресном пространстве, параметры передаются обычным образом. Аналогично серверная процедура вызывается процедурой, находящейся в том же адресном пространстве, с ожидаемыми параметрами. Таким образом, вместо ввода/вывода с помощью сокетов сетевая коммуникация осуществляется обычным вызовом процедуры.

На занятии отлаживается программа, написанная дома по заданию, выданному на лекции по RPC.

Типовое задание

Клиент посылает серверу два числа. Сервер их перемножает и результат возвращает клиенту.

Контрольные вопросы

1. Каков механизм поиска вызываемой программы на серверной стороне при использовании протокола RPC?

13

2.Каким образом задаётся информация для построения заглушек на клиентской и на серверной сторонах использовании протокола RPC?

3.К какому уровню модели взаимосвязи открытых систем относится протокол RPC?

4.Из чего исходят при выборе нижележащих протоколов обмена для RPC? Назовите эти протоколы.

5.Каким образом серверная ОС получает информацию о наличии на сервере программы для обмена по протоко-

лу RPC?

14

Практическое занятие №4 Особенности разработки сетевых приложений

для UNIX/LINUX с применением компилятора Qt

Цель практического занятия Изучить и освоить разработку сетевых приложений

для UNIX/LINUX с применением компилятора Qt, получить практические навыки по разработке сетевых программ на языках С, С++.

Теоретические сведения

Qt — это библиотека классов C++ и набор инструментального программного обеспечения, предназначенных для построения многоплатформенных приложений с графическим интерфейсом. Qt представляет собой единую платформу для приложений, которые могут работать под управлением

Windows, Mac OS X, Linux, Solaris, HP-UX и других версий Unix.

Вариант известной программы «Hello World» для Qt имеет вид:

#include <qapplication.h> #include <qlabel.h>

//

int main (int argc, char** argv)

{

QApplication app(argc, argv);

QLabel lbl("Hello, World !", 0); app.setMainWidget (&lbl); lbl.show();

return app.exec();

}

15

Её можно набрать в любом текстовом редакторе. Компиляция и сборка программы выполняются за 3 шага.

1.

Создаётся файл проекта *.pro с помощью

утилиты qmake. Простой пример файла проекта:

 

SOURCES =

hello.cpp

 

HEADERS =

hello.h

 

CONFIG

+= qt warn_on release

 

TARGET

=

hello

Где SOURCES указывает на файл с исходным текстом программы. Если в проекте несколько таких файлов, то можно перечислить их так:

SOURCES = hello.cpp newone.cpp

или так:

SOURCES += hello.cpp SOURCES += newone.cpp

Аналогично, HEADERS содержит имена заголовочных файлов. CONFIG содержит информацию о конфигурации приложения. Файл проекта должен иметь то же имя, что и исполняемый файл приложения, здесь это hello.pro.

Утилита qmake запускается в каталоге, где содержатся файлы с исходными текстами, строкой типа

qmake -project -o hello.pro

2. Генерация файла makefile командой: qmake -o makefile hello.pro

В файле makefile содержатся команды компилятору для компиляции и команды для сборки исполняемой программы. При необходимости можно изменить параметры компиляции, например, изменить режимы отладки или глубины оптимизации программы.

3. Компиляция файлов и сборка программы make

Утилита make берёт параметры из файла makefile. Полученная программа, здесь hello запускается ко-

мандой ./hello

16

После тренировки по работе с приложениями для Qt,

находящимися в каталогах /home/Ex332_Probe/Hello, /home/Ex332_Probe/Dial изучите клиент-серверную программу в каталоге /home/Ex332_Probe/Network,

постройте её и запустите на выполнение.

Контрольные вопросы

1.Для каких платформ возможна разработка программ на языке С++ с применением компилятора Qt?

2.Каков порядок разработки и выполнения программ с применением компилятора Qt?

3.Назовите особенности структуры программ и проекта для компилятора Qt.

17

Домашнее задание №1 для подготовки к занятиям по разработке сетевого приложения

для Windows на С++

Цель задания Подготовиться к занятиям по разработке сетевого при-

ложения для Windows на языке С++

В этой работе мы создадим простую модель автомобиля на языке C++. Модель будет предоставлять следующие возможности.

1.Позволять пользователю создавать машину, присваивая ей имя и определяя максимальную скорость.

2.Обеспечивать, чтобы максимальная скорость не превышала 500 км/ч.

3.Отображать максимальную скорость и имя машины.

4.Ускорять машину с приращением 10 км/ч.

5.Определять, не сломался ли двигатель из-за чрезмерной скорости.

Просмотрите данные материалы, на практических занятиях они будут использоваться в качестве исходных данных.

Параметры машины содержатся в структуре CAR: struct CAR

{

 

char

petName[MAX_NAME_LENGTH];

int

maxSpeed;

int

currSpeed;

};

 

Будет создан класс с именем CCаr, объединяющий вместе глобальные функции и структуру CAR в единый структурный блок.

Готовое решение находится в каталоге … \Ch1\CarInCPP.

18