如何修改我的服务器以接受多个客户端?
void Serveur()
{//Declaring process variables.
int server_sockfd, client_sockfd;
int server_len ;
int rc ;
unsigned client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
//Remove any old socket and create an unnamed socket for the server.
server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htons(INADDR_ANY);
server_address.sin_port = htons(1111) ;
server_len = sizeof(server_address);
rc = bind(server_sockfd, (struct sockaddr *) &server_address, server_len);
printf("RC from bind = %d\n", rc ) ;
//Create a connection queue and wait for clients
rc = listen(server_sockfd, 5);
printf("RC from listen = %d\n", rc ) ;
client_len = sizeof(client_address);
client_sockfd = accept(server_sockfd, (struct sockaddr *) &client_address, &client_len);
printf("after accept()... client_sockfd = %d\n", client_sockfd) ;
char ch[BUFFER_TAILLE];
}
答案 0 :(得分:1)
你有两个解决方案。
第一个是处理不同进程/线程中的每个客户端。请按照此link获取更多信息(处理多个连接部分)。
答案 1 :(得分:0)
为了能够接受多个客户,您需要做一些事情:
read
/ recv
在客户端套接字上,它不会阻塞,但如果没有任何内容可以立即返回。select
或poll
(或类似)函数来了解哪些套接字已准备好。select
,并检查服务器套接字或任何客户端套接字是否“就绪”(即,您可以接收输入)。互联网上有很多示例和教程,说明如何执行此操作。
除了上面概述的方法之外,还有其他方法可以解决这个问题。最常见的是保持套接字阻塞,当新连接到达时,您创建一个新线程或进程来处理客户端连接。此方法最常见于服务器,如客户端连接较短的Web服务器,或者您不希望有多个活动连接。
您当然可以组合这些方法,例如让进程/线程处理多个连接。