服务器监听端口21,并且能够同时为来自客户端(C1、C2等)的多个传入连接提供服务,而不阻塞它们
因此,当客户机C1在端口21上连接到服务器S时,服务器接受主线程上的连接,并创建一个新线程TH1,让它处理客户机请求,同时主线程开始再次向端口21列出以接受新客户机。
C1接收数据并将更多数据发送到端口21上建立的同一连接上的服务器。
当服务器的主线程继续侦听端口21时,该数据到达服务器并由线程Th1接收。
您需要提供在客户端和服务器之间发送的具有唯一 client id . 你需要一个可辨别的握手包。
client id
当服务器收到 hand-shake 包,它启动一个线程,从包中给它客户端id,并继续侦听端口21。
hand-shake
conditional variable .
conditional variable
当服务器的主线程得到 data 数据包,它发布 id 条件变量
data
id
条件变量
别忘了随时终止线程 good-bye 包或在一个 timeout .
good-bye
timeout