Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Перед вызовом процедуры на отдаленном сервере в коде клиента необходимо получить клиентский дескриптор, который будет использован дальше для вызова сохраненных процедур из сервера. Этот дескриптор является указателем на специальную структуру CLIENT. Для его получения используют функцию clnt_create()
#include <rpc/rpc.h>
CLIENT *clnt_create(const char *host, unsigned long pnum.
unsigned long ver. const char *protocol);
где: host - имя или IP-адрес отдаленного хоста;
pnum - номер приложения (в заглавном файле, згенерованому rpcgen, для него определяют соответствующую константу, например HELL0PR0G);
ver — номер версии (для него определяют аналогичную константу, например HELL0JER);
protocol — строка с названием протокола ("tcp", "udp").
Заглавный файл <rpc/rpc.h> будет автоматически подключен в myrpc.h, потому явно подключать его не обязательно.
#include "myrpc.h"
CLIENT *cl:
сl = clnt_create("myserver". HELL0_PR0G. HELLOJER. "tcp"):
По получении клиентского дескриптора можно вызывать отдаленную процедуру. Для этого вызывают процедуру имя_номер_версии(): для процедуры say-hello() нужно вызывать sayhello_1(). Все аргументы передают в эту функцию как указатели, последним аргументом дополнительно задают клиентский дескриптор.
struct rasg hello = { "hello world" };
void *res = sayhello_1(&hello. cl);
Вызов отдаленной процедуры может вернуть NULL: это значит, что произошла ошибка. Строку с информацией об ошибке в этом случае возвращает функция clnt_sperror(), которая первым параметром принимает клиентский дескриптор, а вторым — имя отдаленного хоста:
if (res == NULL)
printf("Ошибка: %s\n". clnt_sperror(cl. "myserver"));
Дата публикования: 2015-04-07; Прочитано: 230 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!