【问题标题】:Server Client Program in CC中的服务器客户端程序
【发布时间】:2011-09-22 12:18:44
【问题描述】:

在 server-client 程序中,服务器可以监听多个客户端。

listen(sockfd,5);

这是否意味着服务器可以同时处理 5 个客户端。或者我必须为此使用多线程?

【问题讨论】:

    标签: c multithreading sockets


    【解决方案1】:

    不,这意味着 5 个客户端可以连接而无需您调用 accept。在这 5 个客户端连接后(实际上略多于 5 个),新连接将失败。

    堆栈“接受”连接(完成握手),无需您的干预。因此,如果您不调用accept,如果您使用嗅探器,您将看到成功的握手。当您真正决定accept(2) 一个连接时,堆栈只会将其提供给您。

    【讨论】:

      【解决方案2】:

      这意味着除非您开始接受它们,否则在连接失败之前它们是最多 5 个连接的队列。它正在查看 Apache 源代码,因为我认为它是实现服务器的绝佳模板。

      【讨论】:

        【解决方案3】:

        我会说是的,第二个参数为您提供待处理连接队列的最大长度(来自手册页 http://linuxmanpages.com/man2/listen.2.php )。 不,不需要多线程。

        【讨论】:

          【解决方案4】:

          上面的表达式表示有 5 个客户端正在排队,如果队列已满,第 6 个客户端将被忽略。您必须使用 accept() 来读取队列,以便其他人可以连接。您可以阅读此链接http://linux.die.net/man/2/connect 并进一步阅读有关 select() 的高级套接字编程。如果您想使用 fork() 一次为多个客户端提供服务,则可以使用多线程。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多