Пока (флаг завершения потока приема не установлен)
{
принять запрос из сокета;
положить запрос в очередь на обработку;
}
}
Функция обработки запросов()
{
Пока (флаг завершения потока обработки не установлен)
{
прочитать запрос из очереди на обработку;
обработать запрос и сформировать ответ;
положить ответ в очередь на передачу;
}
}
Функция передачи ответов()
{
Пока (флаг завершения потока передачи не установлен)
{
прочитать ответ из очереди на передачу;
передать ответ в сокет;
}
}
Функция ожидания соединений()
{
Пока (флаг завершения потока ожидания соединений не установлен)
{
прием соединения от клиента;
Если соединение принято
{
создать поток приема запросов;
создать поток обработки запросов;
создать поток передачи ответов;
завершить работу потока ожидания соединений;
}
}
}
Основная программа()
{
объявить идентификатор потока приема запросов;
объявить идентификатор потока обработки запросов;
объявить идентификатор потока передачи ответов;
объявить идентификатор потока ожидания соединений;
создать «слушающий» сокет;
привязать «слушающий» сокет к адресу;
перевести сокет в состояние прослушивания;
создать очередь запросов на обработку;
создать очередь ответов на передачу;
создать поток ожидания соединений;
ждать нажатия клавиши;
установить флаг завершения потока приема запросов;
установить флаг завершения потока обработки запросов;
|
|
установить флаг завершения потока передачи ответов;
установить флаг завершения потока ожидания соединений;
ждать завершения потока приема запросов;
ждать завершения потока обработки запросов;
ждать завершения потока передачи ответов;
ждать завершения потока ожидания соединений;
закрыть соединение с клиентом;
закрыть сокет для работы с клиентом;
закрыть «слушающий» сокет;
}
Шаблон программы-клиента представлен ниже:
Объявить сокет для работы с сервером
объявить флаг завершения потока установления соединения;
объявить флаг завершения потока передачи запросов;
объявить флаг завершения потока приема ответов;
Функция передачи запросов()
{
Пока (флаг завершения потока передачи запросов не установлен)
{
задержка на время;
создать запрос;
передать запрос в сокет;
}
}
Функция приема ответов()
{
Пока (флаг завершения потока приема ответов не установлен)
{
принять ответ из сокета;
вывести ответ на экран;
}
}
Функция установления соединения()
{
Пока (флаг завершения потока установления соединения не установлен)
{
установить соединение с сервером;
Если соединение установлено
|
|
{
создать поток передачи запросов;
создать поток приема ответов;
завершить работу потока;
}
}
}
Основная функция()
{
объявить идентификатор потока установления соединения;
объявить идентификатор потока передачи запросов;
объявить идентификатор потока приема ответов;
создать сокет для работы с сервером;
создать поток установления соединения;
ждать нажатия клавиши;
установить флаг завершения потока передачи запросов;
установить флаг завершения потока приема ответов;
установить флаг завершения потока установления соединения;
ждать завершения потока установления соединения;
ждать завершения потока передачи запросов;
ждать завершения потока приема ответов;
закрыть соединение с сервером;
закрыть сокет;
}
Вопросы для самопроверки
1. Каким образом обеспечить одновременную работу сервера с несколькими клиентами?
2. Каким образом обеспечить работу клиента с многократным соединением и разъединением с сервером?
3. Каким образом обеспечить работу программ сервера и клиента без блокировки функций приема, ожидания и установления соединения?
4. Как на стороне сервера определить адрес клиента, который установил соединение?
|
|
5. Как обеспечить обмен сообщениями между двумя программами через сокеты без установления соединения?
6. Какие прикладные протоколы, основанные на протоколах TCP и UDP, существуют?
7. Как обработать случай, когда вторая сторона некорректно разрывает соединение?
8. Обоснуйте целесообразность вызова функций accept() и connect() в отдельных потоках.
9. Какие параметры сокета необходимо использовать для осуществления обмена данными между локальными процессами?
Заключение
Работы выполняются индивидуально. Отчет представляется в электронном виде.
Отчет должен содержать описание средства взаимодействия процессов, изучаемого в данной лабораторной работе, подробное описание системных вызовов, используемых в программе, параметров, передаваемых в эти вызовы, текст работающей программы с содержательными комментариями и результаты работы программ.
Защита каждой работы включает в себя следующие этапы:
1. Студент предъявляет отчет по лабораторной работе;
2. Студент демонстрирует следующие умения:
§ умение запустить программу;
§ умение внести изменение в текст программы (требуемые изменения преподаватель фиксирует в отчете);
|
|
§ умение пересобрать программу и снова ее запустить.
3. Студент отвечает на дополнительные вопросы.
Дата добавления: 2018-04-05; просмотров: 459; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!