我必须创建一个包含两部分的程序:客户端/服务器。
我从不同的客户端接收命令,我想让客户端在命令执行期间等待,但是,其他客户端必须能够向服务器发送命令
例如: C1(针对客户 1)和 C2(针对客户 2)
C1 发送命令 -> 服务器接收并执行它,他在 x 秒内无法接受来自 C1 的命令,但他可以接受来自 C2 的命令。
如何使用没有线程的 select 函数来做到这一点?
这是我当前来自服务器的代码:
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;
}
}
所以,我做了很多研究..我听说过有关超时的事情,但我不知道该怎么做。
您可以在客户端列表中管理客户端状态。如果客户端状态是“等待”,请不要回答(或者更好:回答“您必须等待 x”或一些有用的反馈)。所有客户端都能够发送请求,并且只有处于正确状态的请求才会被处理。
当您根据客户端的请求完成工作时,不要忘记重置客户端的状态。