2012-02-03 119 views
2

我需要在C中实现服务器/客户端代码。 服务器需要能够在此时正好接受四个连接。
我不能得到这个工作。我到目前为止已经完成:
1.创建一个套接字
2.它设置为非阻塞:fcntl(sock,F_SETFL, O_NONBLOCK);
3.将其绑定
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

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

  • 创建fd_set文件描述符的观看阅读
  • 打开插座
  • 绑定socket到端口上侦听
  • 开始监听套接字
  • 添加套接字的文件描述符ŧ ○fd_set
  • 虽然没有做过
    • 使用select等到套接字准备通过您fd_set具有可用
    • 数据的FDS从
    • 循环读取如果当前fd是你的监听套接字,接受一个新的连接
    • 否则,这是一个客户端fd。从它读取,也许写回来。

This page示出上述处理的流程图。 (向下滚动以获得非常好的注释示例。)

This page充满了select的示例。

+0

非常感谢你的详细解释。我得到它的工作,终于! – Maggie 2012-02-04 09:13:08

1

你应该看看select的男人。它会告诉你什么时候和插座是准备写/读

相关问题