c++ - 如何与多个客户端建立TCP连接,C++

标签 c++ multithreading tcp

我正在尝试使用 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...
}

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

最佳答案

是的,有更好的技术。

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

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

你应该查一下 C10K谷歌上的问题。您会发现很多关于如何编写处理许多传入客户端请求的服务器的文章。

关于c++ - 如何与多个客户端建立TCP连接,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31422620/

相关文章:

c++ - 在子类中覆盖时连接到基类的信号

c++ - 了解对齐概念

c# - C# 中的 WebRequest/WebResponse 阻塞

java - 跨多个 ServerBootstrap 使用相同的线程池是否安全?

python - 为什么在UDP中的UDP流接收器中视频损坏了?

c++ - 如何用Cmake获取libasan.so路径?

c++ - 如何重载 static 和 dynamic_pointer_cast

java - 如何处理ExecutorService任务抛出的异常?

java - 在这种情况下我需要使用线程安全映射吗?

python - 客户端没有响应 - Python 中的多线程