【问题标题】:How to build a TCP connection with multiple clients, c++如何与多个客户端建立 TCP 连接,C++
【发布时间】:2015-07-15 14:10:00
【问题描述】:

我正在尝试使用 c++ 在 Windows 上构建 TCP 服务器。我知道如果我想与所有客户端通信,我可以使用线程。一个线程处理一个客户端。我想知道是否有其他方法可以处理此任务,例如:

std::vector<SOCKET> clients;
while(clients.size() < 1024){
    SOCKET ss = accept(ListenSocket, NULL, NULL);
    clients.push_back(ss);
}

while(true){
    SOCKET speckingClient = Function(clients);
    iResult = recv(speckingClient, recvbuf, recvbuflen, 0);
    // the rest of the function...
}

上面的代码无法运行,但希望能显示我正在寻找的内容。

【问题讨论】:

  • 先了解客户端-服务器架构,然后再了解套接字处理。

标签: c++ multithreading tcp


【解决方案1】:

是的,有更好的技术。

首选方法是使用select()(或更可能是它的替代品之一)。可以选择使用线程池。

select() 允许您同时等待多个端口上的输入。当输入可用(或空间可用于写入)时,选择返回允许您处理所有端口上的所有可用输入/输出。

您应该在 google 上查找 C10K 问题。您会发现很多关于如何编写处理大量传入客户端请求的服务器的文章。

【讨论】:

  • 感谢 C10K 链接!!
  • 您还应该注意,所谓的 C10K 问题本身已被认为已过时多年。
  • @EJP:我已经有好几年没看它了,所以我实际上并没有意识到这一点。您有其他我们应该查看的参考资料吗?
猜你喜欢
  • 2013-06-06
  • 1970-01-01
  • 2021-11-06
  • 2019-09-20
  • 2013-05-07
  • 1970-01-01
  • 2011-12-24
相关资源
最近更新 更多