【发布时间】:2018-08-03 02:28:03
【问题描述】:
我写了一个服务器和一个客户端套接字代码,如果客户端输入exit 服务器端给出消息“客户端从 127.0.0.1 断开:端口号”并且客户端连接被切断,双方没有任何问题,服务器继续运行正如预期的那样。但是,当我在客户端执行ctrl+c 时,服务器端会陷入无限循环。当客户写“退出”时,我如何防止或捕捉和忽略这一点并给出相同的消息。无限循环返回"Client clicked "
服务器端:
...
while(1){
accept(...)
...
if((pid = fork() == 0){
//close(sock); uncommented this because when I write "exit" it exits as expected but server side throws a "accept:bad file descriptor"
while(1){
recv(sock2, buffer, 1024, 0);
if(strcmp(buffer, "exit") == 0){
printf("Client disconnected from %s:%d\n", inet_ntoa(peer.sin_addr), ntohs(peer.sin_port) );
break;
else{
printf("Client clicked %s\n", buffer);
send(sock2, buffer, strlen(buffer), 0);
bzero(buffer, sizeof(buffer));
}
}
}
}
close(sock);
return 0;
客户端:
...
while(1){
...
if(strcmp(move, "exit") == 0){
close(sock);
printf("Disconnected from the server\n");
exit(0);
}
...
}
close(sock);
return 0;
【问题讨论】:
-
没有代码没用。
-
@BaseZen 非常基本的服务器和客户端套接字代码,我在服务器和客户端都有一个 while 循环。
-
非常基本的肯定,但也有基本的错误,例如在没有正确反应的 while 循环中重复从关闭的套接字读取。所以,代码:-)
-
@BaseZen 更新 :)
-
@BaseZen 你叫它。干得好。