Лекция: Разработка клиента

Перед вызовом процедуры на отдаленном сервере в коде клиента необходимо получить клиентский дескриптор, который будет использован дальше для вызова сохраненных процедур из сервера. Этот дескриптор является указателем на специальную структуру 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»));

 

еще рефераты
Еще работы по информатике