diff --git a/poll/client.cpp b/poll/client.cpp index ef2e901..24f4693 100644 --- a/poll/client.cpp +++ b/poll/client.cpp @@ -68,6 +68,7 @@ static void handle_connection(int sockfd) } if(pfds[1].revents & POLLIN) { + fprintf(stderr, "echo:"); n = read(STDIN_FILENO, sendline, MAXLINE); if(n == 0) { diff --git a/poll/server.cpp b/poll/server.cpp index 2bf11bb..5062fea 100644 --- a/poll/server.cpp +++ b/poll/server.cpp @@ -106,12 +106,13 @@ void do_poll(int listenfd) char buf[MAXLINE]; memset(buf, 0, MAXLINE); int readlen = 0; - for(i = 1; i<maxi; i++) //第0个是监听端口 + for(i = 1; i<=maxi; i++) //第0个是监听端口 { if(clientfds[i].fd<0) continue; if(clientfds[i].revents & POLLIN) { + fprintf(stdout, "msg client[%d] is:", i); readlen = read(clientfds[i].fd, buf, MAXLINE); if(readlen == 0) { @@ -119,7 +120,6 @@ void do_poll(int listenfd) clientfds[i].fd = -1; continue; } - printf("msg is:"); write(STDOUT_FILENO, buf, readlen); write(clientfds[i].fd, buf, readlen); //发回去 } diff --git a/select/client.cpp b/select/client.cpp index b34db89..f08ed5c 100644 --- a/select/client.cpp +++ b/select/client.cpp @@ -42,7 +42,7 @@ int main(int argc, char* argv[]) while(1) { bzero(buffer, sizeof(buffer)); - scanf("%s", buffer); + fgets(buffer, 1024, stdin); int p = strlen(buffer); buffer[p] = '\0'; send(connfd, buffer, 1024, 0); diff --git a/select/server.cpp b/select/server.cpp index 20584de..598a69a 100644 --- a/select/server.cpp +++ b/select/server.cpp @@ -13,9 +13,8 @@ int main(int argc, char** argv) { - int serverfd, acceptfd; + int serverfd,; struct sockaddr_in my_addr; //服务端 - struct sockaddr_in their_addr; //客户端 unsigned int sin_size, myport = 6666, lisnum = 10; if((serverfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { @@ -77,9 +76,9 @@ int main(int argc, char** argv) { if(FD_ISSET(client_sockfd[i], &client_fdset)) { - printf("start recv from client[%d]:\n, i"); + printf("start recv from client[%d]:\n", i); ret = recv(client_sockfd[i], buffer, 1024, 0); - if(ret<0) + if(ret<=0) //包含零 { printf("client[%d] close\n", i); close(client_sockfd[i]); @@ -106,7 +105,7 @@ int main(int argc, char** argv) bzero(buffer, 1024); strcpy(buffer, "this is a server! welcome!\n"); send(sock_client, buffer, 1024, 0); //把内容传给新来的客户端 - printf("new connection client[%d] %s:%d\n", conn_amount, inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port)); + printf("new connection client[%d] %s:%d\n", conn_amount-1, inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port)); bzero(buffer, sizeof(buffer)); ret = recv(sock_client, buffer, 1024, 0); if(ret<0) @@ -123,6 +122,12 @@ int main(int argc, char** argv) printf("max connections!!!quit!!\n"); break; } + }else{ //满连接处理 + bzero(buffer, 1024); + strcpy(buffer, "Sorry, server connection is full."); + send(sock_client, buffer, 1024, 0); + bzero(buffer, sizeof(buffer)); + close(sock_client); } } }