具有多个客户端的客户端/服

时间:2012-02-03 23:29:55

标签: c sockets

我需要在C中实现服务器/客户端代码。 服务器当时需要能够准确接受四个连接 我不能让这个工作。到目前为止我做了什么:
 1.创建一个插座
 2.将其设置为非阻塞:fcntl(sock,F_SETFL, O_NONBLOCK);
 绑定它  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));
}

当我执行客户端和服务器代码时,客户端似乎正在向套接字写入内容,哪个服务器从未接收过,整个执行阻止。 接受来自多个客户的连接的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

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

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

This page显示了上述过程的流程图。 (向下滚动以获得一个非常好的注释示例。)

This page充满了select的例子。

答案 1 :(得分:1)

你应该看看select的男人。它会告诉您何时以及哪些套接字可以写入/读取