不断运行服务器套接字

我已经编写了使用TCP套接字在服务器和客户端之间建立连接的代码。我在断开客户端方面遇到了问题。 即使当前客户端关闭,我希望服务器端连续运行等待下一个客户端。 我的客户端代码:

int main(int argc, char *argv[]) { int sockfd = 0, n = 0,c; char recvBuff[1024]; struct sockaddr_in serv_addr; if(argc != 2) { printf("\n Usage: %s  \n",argv[0]); return 1; } memset(recvBuff, '0',sizeof(recvBuff)); if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("\n Error : Could not create socket \n"); return 1; } memset(&serv_addr, '0', sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(6006); if(inet_pton(AF_INET, argv[1], &serv_addr.sin_addr)<=0) { printf("\n inet_pton error occured\n"); return 1; } if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) 0) printf("\n Sent \n"); n = recv(sockfd, recvBuff, sizeof(recvBuff)-1,0); recvBuff[n] = 0; if(fputs(recvBuff, stdout) == EOF) { printf("\n Error : Fputs error\n"); } break; case 2: close(sockfd);//to close only client not server case 3: close(sockfd); exit(1); } } } 

服务器端代码:

 int main(int argc, char *argv[]) { int listenfd = 0, connfd = 0,info,n; struct sockaddr_in serv_addr; char sendBuff[1025]; time_t ticks; listenfd = socket(AF_INET, SOCK_STREAM, 0); memset(&serv_addr, '0', sizeof(serv_addr)); memset(sendBuff, '0', sizeof(sendBuff)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(6006); bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); listen(listenfd, 10); while(1) { connfd = accept(listenfd, (struct sockaddr*)NULL, NULL); printf("\n Accepted \n"); while(1) { printf("\n Inside while \n"); if((n=recv(connfd,&info,sizeof(info),0))>0) printf("\n received \n"); switch(info) { case 1: ticks = time(NULL); snprintf(sendBuff, sizeof(sendBuff), "%.24s\r\n", ctime(&ticks)); send(connfd, sendBuff, strlen(sendBuff),0); break; } } close(connfd); } } 

为我提供解决方案,以便在服务器运行时断开客户端(服务器等待下一个客户端连接)。 即使我在案例2中使用return 0它也不起作用。 请帮助我。谢谢

 else if(n == 0) { printf("client disconnected\n"); close(connfd); break; } 

在服务器程序旁边添加上面的代码

 if((n=recv(connfd,&info,sizeof(info),0))>0) printf("\n received \n"); 

问题是当您的客户端断开连接时,您需要发送一些api来关闭客户端连接。

如果客户端已正常断开连接,则上面的行将用于自动关闭该客户端。

然后在snprintf(sendBuff, sizeof(sendBuff), "%.24s\r\n", ctime(&ticks));发出警告snprintf(sendBuff, sizeof(sendBuff), "%.24s\r\n", ctime(&ticks));