我正在一个客户端和服务器之间建立套接字连接来做这个简单的聊天应用程序。但它正在无限循环。谁能说我犯了什么错误...
客户端代码
int main(){
int client_socket = socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(9002);
server_address.sin_addr.s_addr = INADDR_ANY;
int connection_status = connect(client_socket, (struct sockaddr*) &server_address, sizeof(server_address));
char server_response[256];
while(1){
read(client_socket, server_response, sizeof(server_response));
printf("Server:%sn",server_response);
printf("Client:");
write(client_socket, server_response, sizeof(server_response));
if(strncmp("exit",server_response,4)==0){
printf("Server Exit Successful");
break;
}
}
close(client_socket);
return 0;
}
服务器代码
int main(){
char server_message[256];
int server_socket = socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in server_address;
server_address.sin_family=AF_INET;
server_address.sin_port=htons(9002);
server_address.sin_addr.s_addr=INADDR_ANY;
bind(server_socket,(struct sockaddr*) &server_address, sizeof(server_address));
listen(server_socket,1);
int network_socket = accept(server_socket,NULL,NULL);
while(1){
write(network_socket,server_message,sizeof(server_message));
printf("Client:%sn",server_message);
printf("Server:");
read(network_socket,server_message,sizeof(server_message));
if((strncmp(server_message,"exit",4))==0)
{
printf("Client Exit...n");
break;
}
}
close(server_socket);
return 0;
}
我看到的一个问题是你没有给你的客户端一个要连接的地址。INADDR_ANY不会神奇地找到正确的服务器IP地址。当然,这不会导致无限循环,但它会导致您的服务器永远侦听它永远不会获得的连接,这可能看起来像一个无限循环。您的客户端将进入无限循环,因为您的循环是无限的,并且在连接系统调用后您不会检查错误。