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