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