【问题标题】:How does client data go to sub thread of the server rather than original listening thread?客户端数据如何进入服务器的子线程而不是原来的监听线程?
【发布时间】:2019-04-13 19:23:45
【问题描述】:

我的问题是关于以下场景中的客户端服务器通信。

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

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

TH1 将一些数据发送回客户端 C1, C1 接收数据并将更多数据发送到在端口 21 上建立的同一连接上的服务器。

这个数据到达服务器,被线程Th1接收,同时Server的主线程继续监听21端口。

我的问题是客户端 C1 在端口 21 上建立的同一连接上发送的进一步数据如何自动转到线程 Th1 ?即使服务器的主线程在端口 21 上监听新连接?

【问题讨论】:

    标签: multithreading tcp network-programming client-server


    【解决方案1】:

    您需要提供在客户端和服务器之间发送的具有唯一client id 的任何包。你需要一个可区分的握手包。

    当服务器收到hand-shake 数据包时,它会启动一个线程,将数据包中的客户端 ID 提供给它,并继续侦听端口 21。

    线程然后发送任何需要的东西,比如在端口 22 到客户端并开始监听 conditional variable。

    当服务器的主线程在端口 21 收到 data 数据包时,它会发布 id 并发送 conditional variable 信号。其中一个等待线程将识别 id 并开始工作。或者,主线程可以创建多个队列和条件变量,每个线程一个,并且只唤醒一个与 id 相关的线程。同时服务器继续监听。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 2014-03-04
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      相关资源
      最近更新 更多