#include <sys/socket.h>
#include <sys/time.h>
#include <netdb.h>
#include "str.h"
void main(argc, argv)
int argc;
char **argv;
{
struct hostent *hp;
struct timeval pertry_timeout, total_timeout;
struct sockaddr_in server_addr;
int sock = RPC_ANYSOCK;
enum clnt_stat clnt_stat;
unsigned long nusers;
char num[MAXLEN];
int sum, i, nums, intsRead[MAXLEN];
register CLIENT *client;
char junk[2], *ptr;
if (argc != 2) {
fprintf(stderr, "usage: client [hostname]\n");
return;
}
if ((hp = gethostbyname(argv[1])) == NULL) {
fprintf(stderr, "can't get addy for %s\n", argv[1]);
return;
}
pertry_timeout.tv_sec = 3;
pertry_timeout.tv_usec = 0;
bcopy(hp->h_addr, (caddr_t)&server_addr.sin_addr, hp->h_length);
server_addr.sin_family = AF_INET;
server_addr.sin_port = 0;
printf("\n\n\nWhich format would you like your data transmitted?\n");
printf(" As [B]inary or [T]ext? ");
gets(junk);
if (tolower(junk[0]) == 't') {
printf("\n Text is the life for me!");
if ((client = clntudp_create(&server_addr, PROGRAM, VERSION,
pertry_timeout, &sock)) == NULL) {
clnt_pcreateerror("clntudp_create");
return;
}
}
else if (tolower(junk[0]) == 'b') {
printf("\n We're going binary");
if ((client = clntudp_create(&server_addr, PROGRAM2, VERSION,
pertry_timeout, &sock)) == NULL) {
clnt_pcreateerror("clntudp_create");
return;
}
}
else
return;
total_timeout.tv_sec = 20;
total_timeout.tv_usec = 0;
num[0] = 't'; /* makes strlen > 0 for first time through while */
printf("\n\n\n Enter the numbers to add each seperated by a space.\n");
printf("Press enter after the numbers to compute or alone to exit.\n\n\n");
while (strlen(num) > 0) {
printf("Input a series of numbers to be added: ");
gets(num);
if (tolower(junk[0]) == 'b') {
nums = 0;
for (i = 0; i < strlen(num); i++) {
if (num[i] == ' ')
nums++;
}
nums++; /* counts the number of ints */
intsRead[0] = nums + 1;
ptr = num;
for (i = 1; i < intsRead[0]; i++) {
if (i == nums)
sscanf(ptr, "%d", &intsRead[i]);
else {
sscanf(ptr, "%d ", &intsRead[i]);
while (*ptr != ' ') {
ptr++; }
ptr++; }
}
}
if (tolower(junk[0]) == 't')
clnt_stat = clnt_call(client, RUSERSPROC_NUM, xdr_str, &num, xdr_int, &sum, total_timeout);
if (tolower(junk[0]) =='b')
clnt_stat = clnt_call(client, RUSERSPROC_NUM, xdr_arry, &intsRead, xdr_int, &sum, total_timeout);
if (clnt_stat != RPC_SUCCESS) {
clnt_perror(client, "rpc");
return;
}
if (strlen(num) > 0) /* doesn't print sum if no input */
printf("The sum of the integers is: %d.\n\n", sum);
}
clnt_destroy(client);
close(sock);
return;
}
©1998 MRC