// client.c // November 10, 2000 // Lisa Frye // Based on Stevens, UNIX Network Programming, Vol 1, page 113 // Server for socket program to add two integers pass from client #include #include #include #include #include #include #define SERV_PORT 9877 #define LISTENQ 1024 #define MAXLINE 512 struct args { long arg1; long arg2; }; struct result { long sum; }; void str_cli2(FILE *fp, int sockfd); int main(int argc, char **argv) { int sockfd; struct sockaddr_in servaddr; struct hostent *hostEnt = (struct hostent *)malloc(sizeof(struct hostent)); struct in_addr *IPaddr = (struct in_addr *)malloc(sizeof(struct in_addr)); if (argc != 2) { printf("usage: tcpcli "); exit(1); } sockfd = socket(AF_INET, SOCK_STREAM, 0); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(SERV_PORT); hostEnt = gethostbyname(argv[1]); IPaddr = (struct in_addr *)hostEnt->h_addr; servaddr.sin_addr = *IPaddr; connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)); str_cli2(stdin, sockfd); /* do it all */ exit(0); } void str_cli2(FILE *fp, int sockfd) { char sendline[MAXLINE]; struct args args; struct result result; while (fgets(sendline, MAXLINE, fp) != NULL) { if (sscanf(sendline, "%ld%ld", &args.arg1, &args.arg2) != 2) { printf("invalid input: %s", sendline); continue; } writen(sockfd, &args, sizeof(args)); if (readn(sockfd, &result, sizeof(result)) == 0) { perror("str_cli: server terminated prematurely"); exit(-1); } // end if printf("%ld\n", result.sum); } }