客户端数据如何进入服务器的子线程而不是原始侦听线程?

时间:2018-11-10 12:37:00

标签: multithreading tcp network-programming client-server

我的问题是在以下情况下有关客户端服务器通信的问题。

服务器侦听端口21,并且能够同时为来自客户端(C1,C2等)的多个传入连接提供服务,而不会阻塞它们

因此,当客户端C1在端口21上连接到服务器S时,服务器接受主线程上的连接并创建新线程TH1,并让它处理客户端请求,同时主线程再次开始向端口21列出以接受新的线程。客户。

TH1将一些数据发送回客户端C1, C1接收数据,并通过与端口21 establisehd相同的连接将更多数据发送到服务器。

此数据到达服务器并由线程Th1接收,而服务器的主主线程继续在端口21上侦听。

我的问题是,客户端C1在端口21上进行的同一连接上发送的其他数据如何自动发送到线程Th1?即使服务器的主线程正在侦听端口21上的新连接?

1 个答案:

答案 0 :(得分:0)

您需要提供任何在客户端之间通过唯一的client id在服务器之间发送的软件包。您需要一个明显的握手包。

服务器接收到hand-shake数据包时,它将启动一个线程,为该数据包提供客户端ID,然后继续侦听端口21。

然后,线程将所需的内容(例如在端口22处)发送到客户端,并开始在conditional variable上侦听。

当服务器的主线程在端口21处收到data数据包时,它将发布id并发出信号conditional variable。等待线程之一将识别ID并将开始工作。另外,主线程可以创建多个队列和条件var,每个线程一个,并仅唤醒与id相关的单个线程。同时服务器继续监听。

不要忘记在good-bye数据包或timeout处杀死线程。