Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Тестовые примеры / ch12 / msg2 / msg_cls3
.C/* client program: use braodcast to print message on server's system console */
#include "msg2.h"
#include "RPC.h"
static int num_responses = 0;
/* client's braodcast call back function */
bool_t callme (caddr_t res_p, struct netbuf* addr, struct netconfig *nconf)
{
num_responses++;
if (res_p==0 || *((int*)res_p)!=0) {
cerr << "clnt: call printmsg fails\n";
return TRUE; /* stop broadcast */
}
cout << "clnt: call printmsg succeeds\n";
return FALSE; /* get more responses */
}
/* client main function */
int main(int argc, char* argv[])
{
int res;
if (argc<2) {
cerr << "usage: " << argv[0] << " msg\n";
return 1;
}
/* client sends a broadcast request and waits for responses */
int rc = RPC_cls::broadcast( MSGPROG, MSGVER, PRINTMSG, (resultproc_t)callme,
(xdrproc_t)xdr_string, (caddr_t)&argv[1],
(xdrproc_t)xdr_int, (caddr_t)&res);
switch (rc) {
case RPC_SUCCESS: break;
case RPC_TIMEDOUT:
if (num_responses) break;
default:
cerr << "RPC broadcast failed\n";
return 2;
}
cout << "RPC braodcast done. No. responses: " << num_responses << endl;
return 0;
}