if (connect(sockfd, (struct sockaddr*)&dest, sizeof(dest)) != 0) { perror("Connect"); exit(errno); } printf("\nReady to start chatting.\n\ Direct input messages and \n\ enter to send messages to the server\n");
while (1) { FD_ZERO(&rfds); FD_SET(0, &rfds); maxfd = 0;
FD_SET(sockfd, &rfds); if (sockfd > maxfd) maxfd = sockfd;
tv.tv_sec = 2; tv.tv_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 data\n", 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)); else printf("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; }
len = send(sockfd, buffer, strlen(buffer)-1, 0); if (len < 0) { printf("Message ‘%s‘ failed to send ! \ The error code is %d, error message ‘%s‘\n", buffer, errno, strerror(errno)); break; } else { printf("News: %s \t send, sent a total of %d bytes!\n", buffer, len); } } } }