Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KS лаба 1-2 / Kompyuternye_seti_Lab_praktikum (1).pdf
Скачиваний:
133
Добавлен:
11.05.2015
Размер:
1.64 Mб
Скачать

 

add.sin_addr.s_addr = inet_addr("127.0.0.1");

 

 

int t;

 

 

 

 

 

 

t = sizeof(add);

 

 

 

 

 

 

cout<<"Enter the string, рlease"<<endl;

 

 

 

cin.getline(buf,100,'\n');

 

 

 

 

t);

sendto(s, buf, lstrlen(buf), 0, (struct sockaddr*) &add,

 

 

 

 

 

Р

 

 

 

 

 

 

 

int rv = recvfrom(s, b, lstrlen(b), 0, (struct sockaddr*)

&add, &t);

 

 

 

И

 

b[rv] = '\0';

 

 

 

 

cout<<b<<endl;

 

Г

}

closesocket(s);

 

 

WSACleanuр();

 

 

У

 

 

return 0;

а

 

 

 

2.5 Индивидуальные задания

 

 

 

 

Б

 

 

 

 

к

рхитектуру «клиент-сервер». Не-

Разработать приложение, реализующее

соединения (UDP). Логику взаимодействия лиента и сервера реализовать следующим образом:

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

1. Клиент вводит с клавиа уры строку символов и посылает ее серверу. Признак окончания ввода с роки – нажатие клавиши «Ввод». Сервер, получив

эту строку, должен

 

 

ь длину введенной строки, и, если эта длина крат-

на 3, то удаляются все ч

сла, к

делятся на 3. Результаты преобразований

 

 

торые

 

этой строки возвращаютсяоназад клиенту.

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

 

определи

 

 

Признак окончания ввода строки – нажатие клавиши «Ввод». Сервер, получив

Б3.строкиКл ент вводит с клавиатуры строку символов и посылает ее серверу. Признак окончания ввода строки – нажатие клавиши «Ввод». Сервер, получив эту строку, должен выяснить, имеются ли среди символов этой строки все буквы, входящие в слово WINDOWS. Количество вхождений символов в строку передать назад клиенту.

эту строку, должен определить длину введенной строки, и, если эта длина чет-

 

л

ная, то удаляются 3 первых и 2 последних символа. Результаты преобразова-

ний этой

бвозвращаются назад клиенту.

4. Клиент вводит с клавиатуры строку символов и посылает ее серверу. Признак окончания ввода строки – нажатие клавиши «Ввод». Сервер, получив эту строку, должен определить длину введенной строки, и, если эта длина не-

27

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

5. Клиент вводит с клавиатуры строку символов и посылает ее серверу. Признак окончания ввода строки – нажатие клавиши «Ввод». Сервер, получив эту строку, должен заменить в этой строке каждый второй символ @ на #. Результаты преобразований передаются назад клиенту.

6. Клиент вводит с клавиатуры строку символов и посылает ее серверу. Признак окончания ввода строки – нажатие клавиши «Ввод». Сервер, получив

эту строку, должен заменить в этой строке символов все пробелы на символ *.

Преобразованная строка передается назад клиенту.

Р

 

7. Клиент вводит с клавиатуры строку символов и посылает ее серверу.

 

И

Признак окончания ввода строки – нажатие клавиши «Ввод». Сервер, получив

эту строку, должен определить длину введенной строки, и, если длина больше

 

 

У

15, то из нее удаляются все цифры. Клиент получает преобразованную строку и

количество удаленных цифр.

Г

8. Клиент вводит с клавиатуры строку символов и посылает ее серверу.

 

Б

 

Признак окончания ввода строки – нажатие клавиши «Ввод». Сервер, получив эту строку, должен определить длину введенной строки, и, если длина кратна 4, то удаляются все числа, делящиеся на 4. Клиент получает преобразованную

строку и количество таких чисел.

 

строку

символов и посылает ее серверу.

9. Клиент вводит с клавиатуры

Признак окончания ввода строки – наж тие

кл виши «Ввод». Сервер, получив

эту строку, должен определить длину авведенной строки, и, если эта длина

сылается клиенту. е 10. Клиент вводит с клавиа уры строку символов и посылает ее серверу.

кратна 5, то подсчитывается колич ство скобок всех видов. Их количество по- т

на 4, то первая часть остр ки меняется местами со второй. Результаты преобразований возвращаются назад клиенту.

Признак окончания вв да с р ки – нажатие клавиши «Ввод». Сервер, получив

эту строку, должен пределить длину введенной строки, и, если эта длина крат-

11. К иент

 

с клавиатуры строку символов и посылает ее серверу.

 

 

 

вводит

Признак окончания ввода строки – нажатие клавиши «Ввод». Сервер, получив

эту строку,

 

определить длину введенной строки, и, если значение этой

 

 

должен

 

дл ны равно 10, то удаляются все символы от A до Z. Результаты преобразова-

 

б

 

 

ний такой строки и количество удалений возвращаются назад клиенту.

и

 

 

Б

 

 

 

 

12. Клиент вводит с клавиатуры строку символов и посылает ее серверу. Признак окончания ввода строки – нажатие клавиши «Ввод». Сервер, получив эту строку, должен определить длину введенной строки, и, если длина больше 15, то удаляются все символы от a до z. Преобразованная строка и количество удаленных символов возвращаются назад клиенту.

13. Клиент вводит с клавиатуры строку символов и посылает ее серверу. Признак окончания ввода строки – нажатие клавиши «Ввод». Сервер, получив эту строку, должен в полученной строке символов поменять местами символы на четных и нечетных позициях. Полученную строку возвратить назад клиенту.

28

14.Клиент вводит с клавиатуры строку символов и посылает ее серверу. Признак окончания ввода строки – нажатие клавиши «Ввод». Сервер, получив эту строку, должен определить длину введенной строки, и, если длина больше 7, то выделяется подстрока в { } скобках и возвращается назад клиенту.

15.Клиент вводит с клавиатуры строку символов и посылает ее серверу. Признак окончания ввода строки – нажатие клавиши «Ввод». Сервер, получив эту строку, должен определить длину введенной строки и, если длина больше 15, то выделяется подстрока до первого пробела и возвращается назад клиенту.

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

1.Что содержит UDP-сообщение помимо посылаемых данныхИ?

2.Что называется дейтаграммой?

3.Какие возможности не предоставляет UDP (в отличиеУот TCP)?

4.Чем функции sendto() и recvfrom() отличаются от функций send() recv()? Г

5.Что происходит, если размер буфераБ, переданный в функцию recvfrom(), слишком мал для приема всей дейтаграммы целиком?

6.Приведите примеры сетевых приложений, использующих UDP.

7.В каких случаях применение UDPа-протокола может быть предпочтительней, чем TCP? ке

 

 

 

 

 

т

 

 

 

 

о

 

 

 

и

 

 

 

л

 

 

 

б

 

 

 

и

 

 

 

 

Б

 

 

 

 

 

29

ЛАБОРАТОРНАЯ РАБОТА №3

Создание параллельного многопоточного сервера с установлением логического соединения TCP

Цель работы: изучить методы создания серверных приложений на основе установления логического соединения TCP, используя алгоритм многопоточной обработки запросов.

В предыдущих лабораторных работах были показаны примеры реализа-

 

 

 

 

 

 

 

 

И

 

 

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

логического соединения. В данной лабораторной работе рассматриваетсяР

при-

мер параллельного сервера с установлением логического соединения.

 

 

Мнoгoпoтoчнoсть –

этo

 

 

 

Г

 

 

 

 

специaлизирoвaннaя фoрмa мнoгoзaдaчнoсти

(multitasking). Что касается

многозадачности,

то

выделяют

двa

типa

 

 

 

 

 

Б

 

 

 

 

 

мнoгoзaдaчнoсти: oснoвaнную нa прoцессaх (process-basedУ) и oснoвaнную нa

пoтoкaх

(thread-based).

Пo

сути, прoцесс

(process) –

этo

отдельно

выпoлняющaяся прoгрaммa.

Тaким

а

 

 

 

нa

прoцессaх

oбрaзoм, oснoвaннaя

мнoгoзaдaчнoсть – средствo,

пoзвoляющее вaшему кoмпьютеру выпoлнять

oднoвременнoе выпoлнение н скoлькихпрoгрaмм, a втoрaя имеет делo с

нескoлькo прoгрaмм oднoвременнo.

 

 

 

 

 

 

 

 

Отличия oснoвaннoй нa

цесс

a

и мнoгoпoтoчнoй мнoгoзaдaчнoсти

прo

мoжнo

сфoрмулирoвaть

сл дующим

oбрaзoм:

первaя

пoддерживaет

oднoвременным выпoлнением рaзных фрaгментoв oднoй и тoй же прoгрaммы. С помощью можно организовать параллельное выполнение программ. Для этого пр цессы клонируются с помощью вызовов функции

fork() или функции exec(), а

между ними (процессами) организуется взаи-

 

затем

модействие средствами IPC. Это довольно дорогостоящий с точки зрения ре-

сурсов процесс.

процессов

 

С другой стороныи, для организации параллельного выполнения и взаимо-

действиябчастилпрограммы можно использовать механизм многопоточности.

Основной ед ницей здесь является поток. Рассмотрим этот механизм подробнее.

и3.1 Потоки

Последовательная реализация сервера, о которой речь шла в предыдущих

лабораторныхБ

работах, может оказаться неподходящей, поскольку клиенты бу-

дут вынуждены ждать завершения обработки всех предыдущих запросов на установление соединения. Если клиент решит передать большие объемы данных (например, несколько мегабайт), последовательный сервер отложит обслуживание всех других клиентов до тех пор, пока не выполнит этот запрос.

30

Соседние файлы в папке KS лаба 1-2