Пока (флаг завершения потока приема не установлен)



{

принять запрос из сокета;

положить запрос в очередь на обработку;

}

}

Функция обработки запросов()

{

Пока (флаг завершения потока обработки не установлен)

{

прочитать запрос из очереди на обработку;

обработать запрос и сформировать ответ;

положить ответ в очередь на передачу;

}

}

Функция передачи ответов()

{

Пока (флаг завершения потока передачи не установлен)

{

прочитать ответ из очереди на передачу;

передать ответ в сокет;

}

}

Функция ожидания соединений()

{

Пока (флаг завершения потока ожидания соединений не установлен)

{

прием соединения от клиента;

Если соединение принято

{

создать поток приема запросов;

создать поток обработки запросов;

создать поток передачи ответов;

завершить работу потока ожидания соединений;

}

}

}

Основная программа()

{

объявить идентификатор потока приема запросов;

объявить идентификатор потока обработки запросов;

объявить идентификатор потока передачи ответов;

объявить идентификатор потока ожидания соединений;

создать «слушающий» сокет;

привязать «слушающий» сокет к адресу;

перевести сокет в состояние прослушивания;

создать очередь запросов на обработку;

создать очередь ответов на передачу;

создать поток ожидания соединений;

ждать нажатия клавиши;

установить флаг завершения потока приема запросов;

установить флаг завершения потока обработки запросов;

установить флаг завершения потока передачи ответов;

установить флаг завершения потока ожидания соединений;

ждать завершения потока приема запросов;

ждать завершения потока обработки запросов;

ждать завершения потока передачи ответов;

ждать завершения потока ожидания соединений;

закрыть соединение с клиентом;

закрыть сокет для работы с клиентом;

закрыть «слушающий» сокет;

}

 

Шаблон программы-клиента представлен ниже:

 

Объявить сокет для работы с сервером

объявить флаг завершения потока установления соединения;

объявить флаг завершения потока передачи запросов;

объявить флаг завершения потока приема ответов;

Функция передачи запросов()

{

Пока (флаг завершения потока передачи запросов не установлен)

{

задержка на время;

создать запрос;

передать запрос в сокет;

}

}

Функция приема ответов()

{

Пока (флаг завершения потока приема ответов не установлен)

{

принять ответ из сокета;

вывести ответ на экран;

}

}

Функция установления соединения()

{

Пока (флаг завершения потока установления соединения не установлен)

{

установить соединение с сервером;

Если соединение установлено

{

создать поток передачи запросов;

создать поток приема ответов;

завершить работу потока;

}

}

}

Основная функция()

{

объявить идентификатор потока установления соединения;

объявить идентификатор потока передачи запросов;

объявить идентификатор потока приема ответов;

создать сокет для работы с сервером;

создать поток установления соединения;

ждать нажатия клавиши;

установить флаг завершения потока передачи запросов;

установить флаг завершения потока приема ответов;

установить флаг завершения потока установления соединения;

ждать завершения потока установления соединения;

ждать завершения потока передачи запросов;

ждать завершения потока приема ответов;

закрыть соединение с сервером;

закрыть сокет;

}


Вопросы для самопроверки

1. Каким образом обеспечить одновременную работу сервера с несколькими клиентами?

2. Каким образом обеспечить работу клиента с многократным соединением и разъединением с сервером?

3. Каким образом обеспечить работу программ сервера и клиента без блокировки функций приема, ожидания и установления соединения?

4. Как на стороне сервера определить адрес клиента, который установил соединение?

5. Как обеспечить обмен сообщениями между двумя программами через сокеты без установления соединения?

6. Какие прикладные протоколы, основанные на протоколах TCP и UDP, существуют?

7. Как обработать случай, когда вторая сторона некорректно разрывает соединение?

8. Обоснуйте целесообразность вызова функций accept() и connect() в отдельных потоках.

9. Какие параметры сокета необходимо использовать для осуществления обмена данными между локальными процессами?

 


Заключение

Работы выполняются индивидуально. Отчет представляется в электронном виде.

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

Защита каждой работы включает в себя следующие этапы:

1. Студент предъявляет отчет по лабораторной работе;

2. Студент демонстрирует следующие умения:

§ умение запустить программу;

§ умение внести изменение в текст программы (требуемые изменения преподаватель фиксирует в отчете);

§ умение пересобрать программу и снова ее запустить.

3. Студент отвечает на дополнительные вопросы.


Дата добавления: 2018-04-05; просмотров: 459; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!