Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 具有多个客户机的客户机/服务器体系结构_C_Sockets - Fatal编程技术网

C 具有多个客户机的客户机/服务器体系结构

C 具有多个客户机的客户机/服务器体系结构,c,sockets,C,Sockets,我需要用C实现一个服务器/客户机代码。 服务器需要能够同时接受四个连接。 我不能让它工作。到目前为止我所做的: 1.创建套接字 2.将其设置为非阻塞:fcntl(sock、F_SETFL、O_NONBLOCK) 3.绑定它 4.听:听(sock,4) 我不太确定的部分是如何接受客户的连接。我的代码如下所示: while (1) { if ((sockfd = accept(sock, (struct sockaddr *) &client_addr, &client_si

我需要用C实现一个服务器/客户机代码。 服务器需要能够同时接受四个连接。
我不能让它工作。到目前为止我所做的:
1.创建套接字
2.将其设置为非阻塞:
fcntl(sock、F_SETFL、O_NONBLOCK)
3.绑定它
4.听:
听(sock,4)

我不太确定的部分是如何接受客户的连接。我的代码如下所示:

while (1) {
   if ((sockfd = accept(sock, (struct sockaddr *) &client_addr,  &client_size)) < 0) {
            perror("Error\n");
   }
   read(sockfd, &number, sizeof(number));
   write(sockfd, &number, sizeof(number));
}
while(1){
如果((sockfd=accept(sock,(struct sockaddr*)和client\u addr,&client\u size))<0){
perror(“错误”);
}
读取(sockfd和编号,sizeof(编号));
写入(sockfd,&number,sizeof(number));
}
当我执行客户机和服务器代码时,客户机似乎在向套接字写入某些内容,而服务器从未接收到这些内容以及整个执行块。
接受来自多个客户端的连接的正确方式是什么?

您应该寻找
选择的人。它将告诉您何时以及哪些套接字准备好写入/读取

如果您不想使用多线程,这种服务器的一个基本工作流如下所示:

while (1) {
   if ((sockfd = accept(sock, (struct sockaddr *) &client_addr,  &client_size)) < 0) {
            perror("Error\n");
   }
   read(sockfd, &number, sizeof(number));
   write(sockfd, &number, sizeof(number));
}
  • 创建文件描述符的
    fd\u集
    ,以监视读取
  • 打开插座
  • 将套接字绑定到要侦听的端口
  • 开始监听套接字
  • 将套接字的文件描述符添加到
    fd\u集合
  • 虽然没有完成
    • 使用
      选择
      等待套接字准备好从中读取
    • 循环浏览
      fd\u集合中具有可用数据的fd
    • 如果当前fd是您的侦听套接字,请接受新连接
    • 否则,它就是一个客户端fd。读一读,也许再回信
显示了上述过程的流程图。(向下滚动查看注释非常好的示例。)


关于
select

的例子不胜枚举,非常感谢您的详细解释。我终于成功了!!