我的问题是在以下情况下有关客户端服务器通信的问题。
服务器侦听端口21,并且能够同时为来自客户端(C1,C2等)的多个传入连接提供服务,而不会阻塞它们
因此,当客户端C1在端口21上连接到服务器S时,服务器接受主线程上的连接并创建新线程TH1,并让它处理客户端请求,同时主线程再次开始向端口21列出以接受新的线程。客户。
TH1将一些数据发送回客户端C1, C1接收数据,并通过与端口21 establisehd相同的连接将更多数据发送到服务器。
此数据到达服务器并由线程Th1接收,而服务器的主主线程继续在端口21上侦听。
我的问题是,客户端C1在端口21上进行的同一连接上发送的其他数据如何自动发送到线程Th1?即使服务器的主线程正在侦听端口21上的新连接?
答案 0 :(得分:0)
您需要提供任何在客户端之间通过唯一的client id
在服务器之间发送的软件包。您需要一个明显的握手包。
服务器接收到hand-shake
数据包时,它将启动一个线程,为该数据包提供客户端ID,然后继续侦听端口21。
然后,线程将所需的内容(例如在端口22处)发送到客户端,并开始在conditional variable
上侦听。
当服务器的主线程在端口21处收到data
数据包时,它将发布id
并发出信号conditional variable
。等待线程之一将识别ID并将开始工作。另外,主线程可以创建多个队列和条件var,每个线程一个,并仅唤醒与id相关的单个线程。同时服务器继续监听。
不要忘记在good-bye
数据包或timeout
处杀死线程。