2024年2月9日发(作者:)

{int sockfd, len;struct sockaddr_in dest;char buffer[MAXBUF];char heartbeat[20] = "hello server";fd_set rfds;struct timeval tv;int retval, maxfd = -1;if (argc != 3){printf("error! the right format should be : ntt%s IP portnt eg:t%s127.0.0.1 80n",argv[0], argv[0]);exit(0);}if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){perror("Socket");exit(errno);}bzero(&dest, sizeof(dest));_family = AF_INET;_port = htons(atoi(argv[2]));memset(&(_zero), 0, 8);if (inet_aton(argv[1], (struct in_addr*)&_addr.s_addr) == 0){perror(argv[1]);exit(errno);}if (connect(sockfd, (struct sockaddr*)&dest, sizeof(dest)) != 0){perror("Connect");exit(errno);}

printf("nReady to start t input messages and nenter to send messages to the servern");while (1){FD_ZERO(&rfds);FD_SET(0, &rfds);maxfd = 0;FD_SET(sockfd, &rfds);if (sockfd > maxfd)maxfd = sockfd;_sec = 2;_usec = 0;retval = select(maxfd+1, &rfds, NULL, NULL, &tv);if (retval == -1){printf("Will exit and the select is error! %s", strerror(errno));break;}else if (retval == 0){//printf("No message comes, no buttons, continue to wait ...n");len = send(sockfd, heartbeat, strlen(heartbeat), 0);if (len < 0){printf("Message '%s' failed to send ! The error code is %d, error message '%s'n",heartbeat, errno, strerror(errno));break;}else{printf("News: %s t send, sent a total of %d bytes!n",heartbeat, len);

}continue;}else{if (FD_ISSET(sockfd, &rfds)){bzero(buffer, MAXBUF+1);len = recv(sockfd, buffer, MAXBUF, 0);if (len > 0){printf("Successfully received the message: '%s',%d bytes of datan",buffer, len);}else{if (len < 0)printf("Failed to receive the message! The error code is %d, error message is '%s'n",errno, strerror(errno));elseprintf("Chat to terminate!n");break;}}if (FD_ISSET(0, &rfds)){bzero(buffer, MAXBUF+1);fgets(buffer, MAXBUF, stdin);if (!strncasecmp(buffer, "quit", 4)){printf("Own request to terminate the chat!n");break;}