在选择

时间:2015-06-24 08:47:22

标签: c select client server

我必须创建一个包含两个部分的程序:Client / Server。

我收到来自不同客户端的命令,我希望在执行命令期间让客户端等待,但是,其他客户端必须能够向服务器发送命令

例如: C1(对于客户端1)和C2(对于客户端2)

C1发送命令 - >服务器接收并执行它并且他不能接受来自C1的命令x秒,但是他可以接受来自C2的命令。

如何使用select函数withous threads做到这一点。

这是我目前来自服务器的代码:

void            client_ask(t_listplayer *list, t_network *net) {
  char          *buffer = xmalloc(sizeof(char) * 200);
  int           rd = 0;

  memset(buffer, 0, 200);
  while (list != NULL) {
      if (FD_ISSET(list->player->fd, &net->readfds)) {
          if ((rd = xread(list->player->fd, buffer, 200)) > 0) {
              buffer[rd - 1] = '\0';
              printf("Client n°: %d asking : [%s]\n", list->player->fd, buffer);
              sleep(3); // This one put all the server in waiting
              memset(buffer, 0, 200);
            } else {
              close(list->player->fd);
              printf("Client n°: %d has just disconnected", list->player->fd);
            }
        }
      list = list->next;
    }
}

所以,我做了很多研究......我已经听过关于超时的事情,但我不知道该怎么做。 感谢

1 个答案:

答案 0 :(得分:0)

您可以在客户列表中管理客户端状态。如果客户端状态为“等待”,则不要回答(或更好:回答"您必须等待x"或一些有用的反馈)。所有客户端都能够发送请求,只处理正确状态的客户端。

当您的工作完成后,请不要忘记重置客户的状态。