我已经编写了使用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 occuredn"); 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 errorn"); } 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), "%.24srn", ctime(&ticks)); send(connfd, sendBuff, strlen(sendBuff),0); break; } } close(connfd); } }
为我提供解决方案,以便在服务器运行时断开客户端(服务器等待下一个客户端连接)。 即使我在案例2中使用return 0它也不起作用。 请帮助我。谢谢
else if(n == 0) { printf("client disconnectedn"); close(connfd); break; }
在服务器程序旁边添加上面的代码
if((n=recv(connfd,&info,sizeof(info),0))>0) printf("n received n");
问题是当您的客户端断开连接时,您需要发送一些api来关闭客户端连接。
如果客户端已正常断开连接,则上面的行将用于自动关闭该客户端。
然后在snprintf(sendBuff, sizeof(sendBuff), "%.24srn", ctime(&ticks));
发出警告snprintf(sendBuff, sizeof(sendBuff), "%.24srn", ctime(&ticks));
。
以上就是c/c++开发分享不断运行服务器套接字相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/519518.html