gpt4 book ai didi

具有多个客户端的客户端/服务器架构

转载 作者:行者123 更新时间:2023-12-03 11:52:21 24 4
gpt4 key购买 nike

我需要在 C 中实现服务器/客户端代码。
服务器需要能够同时接受四个连接。
我无法让这个工作。到目前为止我所做的:
1.创建套接字
2.设置为非阻塞:fcntl(sock,F_SETFL, O_NONBLOCK); 3.绑定(bind)
4. 收听:listen(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));
}

当我执行客户端和服务器代码时,客户端似乎正在向套接字写入一些东西,而服务器从未接收到该套接字并且整个执行都阻塞了。
接受来自多个客户端的连接的正确方法是什么?

最佳答案

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

  • 创建 fd_set用于读取的文件描述符数量
  • 打开一个套接字
  • 将套接字绑定(bind)到端口以监听
  • 开始监听套接字
  • 将套接字的文件描述符添加到 fd_set
  • 虽然没有完成
  • 使用select等到套接字准备好从
  • 读取
  • 循环浏览您的 fd_set 中的 fds有可用数据的
  • 如果当前 fd 是你的监听套接字,接受一个新的连接
  • 否则,它是一个客户端 fd。读取它,也许写回它。

  • This page显示了上述过程的流程图。 (向下滚动查看一个非常漂亮的注释示例。)

    This page充满了 select 的示例.

    关于具有多个客户端的客户端/服务器架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9136877/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com