Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВЗАИМОДЕЙСТВИЕ СЕТЕВЫХ ПРИЛОЖЕНИЙ.doc
Скачиваний:
53
Добавлен:
01.05.2014
Размер:
579.07 Кб
Скачать

Int имя_функции (caddr_t resp, struct sockaddr_in * server_addr);

Этой функции в параметре resp будет передан адрес возвращаемого значения, а в параметре server_addr - указатель на структуру, содержащую IP-адрес отвечающего узла. Таким образом, клиентская программа будет знать, от кого пришел ответ и каков результат этого ответа. После каждого вызова обслуживающей функции анализируется, возвращаемое его значение. Если оно равно 0, то читается следующий поступивший ответ и повторно вызывается обслуживающая функция. Когда все поступившие ответы будут прочитаны, а обслуживающая функция возвращает. 0 и требует дополнительных ответов, то производится новый широковещательный запрос ко всем узлам сети. Максимальное количество широковещательных запросов, генерируемых функцией clnt_broadcast, - шесть. Если пользовательская функция возвращает ненулевое значение, то функция clnt_broadcast завершает свою работу и возвращает значение RPC_SUCCESS.

-29-

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

#include <stdio.h>

#include “current_time.h”

int resp_count; /* счетчик ответов */

/* обслуживающая функция */

Int prtnt_result(caddr_t out, struct sockaddr_in *s)

{

printf(“\n %s”, *((char**)out)); printf((“\n %s”, inet_ntoa(s->sin_addr)); if(resp_coount < 2 )

{

resp_count++;

return 0;

}

return 1;

Void main( )

{

char *pres; /* указатель на возвращаемое значение */

enum clnt_stat brc;

resp_count=0;

/*широковещательный запрос к удаленной процедуре CURRENT_TIME*/

brc_clnt_broadcast (CURRENT_TIMEPROG, CURRENT_TIMEVERS, (unsigned long) 1, (xdrproc_t)xdr_void, (caddr_t)0, (xdrproc_t) xdr_string, &pres , print_result); switch (brc)

{ case RPC_SUCCESS;

printf(“ пришли все ответы \n);

break; case RPC_TIMEDOUT;

printf(“пришло ответ: %d\n”, resp_count);

break;

default;

print (“Ошибка широковещательный запросе \n”); break;

-30-

В этой программе ожидается три ответа от серверов. Для подсчета числа ответов используется глобальная переменная resp_count. Значение этой переменной увеличивается на 1 при выполнении обслуживающей функции, которая вызывается для каждого ответа. Обслуживающая функция выводит на экран время и дату, полученные от сервера, а также сетевой адрес сервера. После выполнения широковещательного запроса клиентская программа анализирует код возврата функции broadcast.

2.6. Задание к лабораторной работе 2

Разработать серверную и две клиентские программы, взаимодействующие между собой через механизм удаленных процедур. Серверная программа должна работать в режиме однократного запуска по протоколам tср и udp. В ней должна быть реализована функция, указанная в одном из вариантов задания. Если для удаленной процедуры необходимо передать несколько параметров, то они должны быть упакованы в структуру и переданы серверной функции как один аргумент. Первая клиентская программа должна обратиться к удаленной процедуре, запущенной на другой машине. Имя этой машины задается при запуске клиентской программы. Во второй клиентской программе должен быть использован широковещательный режим запроса уделенной процедуры. Перед ее запуском, необходимо запустить модуль с удаленной процедурой на нескольких машинах.

Варианты заданий:

1. Процедура, определяющая день недели, на который приходится указанная дата.

2. Процедура, упорядочивающая массив целых чисел по возрастанию.

3. Процедура, возвращающая список имен файлов в заданном каталоге сервера.

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

5. Процедура, порождающая процесс и запускающая программу из заданного каталога сервера.

6. Процедура, записывающая сообщение в заданный файл.

7. Процедура, выполняющая суммирование двух векторов заданной размерности.

8. Процедура, вычисляющая сумму членов следующего ряда: f +х+2х+3х+…+

+nx .

9. Процедура перемножения двух матриц фиксированного размера.

10. Процедура, осуществляющая поиск заданного файла на сервере.

-31-

Содержание

Введение............................................................................................................................... 3

Лабораторная работа I. ВЗАИМОДЕЙСТВИЕ ПРОЦЕССОВ ЧЕРЕЗ СОКЕТЫ...3

1.1.Понятие сокета...........................................................................................3

1.2. Операции с сокетом.....................................................................................5

1.2.1. Открытие сокета............................................................................................6

1.2.2. Привязка сокета к сетевому адресу...................................................... 6

1.2.3. Подготовка сокета к созданию канала связи....................................... 8

1.2 4. Прием запросов на создание канала.................................................................... 8

1.2.5. Посылка запроса на создание канала..................................................... 9

1.2.6. Передача данных........................................................................................ 9

1.2.7. Прием данных............................................................................................. 10

1.2.8. Прерывание связи с сокетом............................................................................... 11

1.2.9. Закрытие сокета ................................................................................................... 11

1.2.10. Получение и установки параметров сокета .................................................. 11

1.2.11. Опрос сокетов........................................................................................... 12

1.3. Схемы установления связи и передачи данных через сокеты........................... 14

1.4. Задания к лабораторной работе 1........................................................................... 18

Лабораторная работа 2. ПОСТРОЕНИЕ СЕРВЕРНЫХ И КЛИЕНТСКИХ ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ КОМПИЛЯТОРА RPCGEN........................ 18

2.1. Описание интерфейса удаленной процедуры ..................................................... 18

2.2. Построение заглушек для удаленной процедуры.................................................20

2.3. Разработка серверной функции .............................................................................. 24

2.4. Вызов удаленной процедуры в программе клиента............................................ 26

2.5. Широковещательный запрос клиента...................................................................27

2.6. Задание к лабораторной работе 2 ...........................................................................31

Редактор Э.К. Долгатов

Лицензия ЛР № 020617 от 24.06.98

Подписано в печать05.04.99 Форма 60x84 1/16. Бумага тип. № 2.

Печать офсетная. Усл. печ. л. 1,86. Уч.-изд. л. 2,0.

Тираж 150 экз. Заказ 56.

Иэдательско-полиграфический центр СПбГЭТУ(ЛЭТИ)