在客户端创建多少个套接字?

时间:2017-10-14 01:27:05

标签: c++ multithreading sockets thread-safety iocp

我看到一些应用程序使用多个套接字。例如,对于聊天,他们使用独特的套接字,并且对于文件上传,他们使用其他套接字等。为什么在可以在一个套接字中完成此过程?是因为他们处理连接的方式并在每次接听电话后打开一个新的连接插槽?

我正在研究IOCP聊天应用程序,我对这个方案感到困惑。如果我想处理连接,我为每个客户端设置1个套接字,但如果客户端发送文件,我的服务器无法为文件上传分配内存,因为我在处理新接受的连接后这样做,所以它很复杂,以便存储内存池中文件所需的内存,专门用于清理和释放内存。如果我只在客户端使用1个套接字,那么我是否需要根据命令重新分配内存,以便其他缓冲区不会被覆盖?或者最简单的方法是为每个操作使用1个套接字,这些操作需要大量内存,如文件发送图像等,这样我的服务器就会自动为每个新连接分配唯一的缓冲区?

我何时应该在IOCP中使用CRITICAL SECTIONS?在工作线程中,如果我想在收到一些数据后访问缓冲区,则将其复制到收到的总缓冲区。在从临时缓冲区复制到所有缓冲区之前,是否需要输入关键部分,以便其他线程不会干扰值?

1 个答案:

答案 0 :(得分:0)

每次有来自客户端的请求时,服务器端的侦听器套接字都会创建一个新套接字。此时,应创建一个新线程与该客户端通信:它将处理与给定客户端的一对一通信。应在此线程中分配所有必需的资源。在客户端,您有一个处理服务器的线程。