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