The Lower Layer Client





#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;
}

[Project Page] [Programs Page] [REU Page] [Scientific Visualization]

©1998 MRC