#include #include #include #include #include void error(char *msg) { perror(msg); exit(0); } int main(int argc, char *argv[]) { int sockfd, portno, n,len,len1; struct sockaddr_in serv_addr; struct hostent *server; char buffer[256]; if (argc < 3) { fprintf(stderr,"usage %s hostname port\n", argv[0]); exit(0); } portno = atoi(argv[2]); sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) error("ERROR opening socket"); server = gethostbyname(argv[1]); if (server == NULL) { fprintf(stderr,"ERROR, no such host\n"); exit(0); } bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port = htons(portno); if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0) error("ERROR connecting"); printf("Welcome to Fortune Teller Client\n"); printf("Please enter a command GET or BYE: "); bzero(buffer,256); fgets(buffer,255,stdin); while ((buffer[0]=='G') &&(buffer[1]=='E') && (buffer[2]=='T')) { n = write(sockfd,"GET",strlen("GET")); if (n < 0) error("ERROR writing to socket"); bzero(buffer,256); len = read(sockfd,buffer,2);exit(0); if (len < 0) error("ERROR reading from socket"); printf("Welcome to Fortune Teller Client\n"); printf("Please enter a command GET or BYE: "); bzero(buffer,256); fgets(buffer,255,stdin); while ((buffer[0]=='G') &&(buffer[1]=='E') && (buffer[2]=='T')) { n = write(sockfd,"GET",strlen("GET")); if (n < 0) error("ERROR writing to socket"); bzero(buffer,256); len = read(sockfd,buffer,2);exit(0); if (len < 0) error("ERROR reading from socket"); sscanf(buffer,"%d",&len1); bzero(buffer,256); n = read(sockfd,buffer,len1); printf("Your Fortune from the Fortune Server is \n"); printf("%s\n",buffer); bzero(buffer,256); printf("Next Command Please: (GET or BYE)\n"); fgets(buffer,255,stdin); } write(sockfd,"BYE",3); return 0; }