我在这里陷入了一个非常混乱的境地,因此,我将解释整个场景。
我开发了一个 UDP 服务器/多客户端应用程序。
服务器有一个主接收线程。每个想要与服务器通信的客户端首先向服务器发送一个带有一些 ID 的消息。服务器从客户端接收此消息。服务器有一个包含授权 ID 列表的文本文件。当从客户端接收到消息时,服务器将从客户端接收到的 ID 与其文本文件中可用的 ID 进行比较。如果客户端的 ID 与服务器文本文件中的任何 ID 匹配,则认为该客户端已通过身份验证,并为该客户端创建一个新线程和一个新套接字。这个新客户端的信息也在包含所有活动客户端信息的队列中更新。
现在所有这些任务都完成了现在的问题是,由于每个客户端都有一个专用线程为其服务,我希望这些线程向它们各自的客户端发送一些消息并等待客户端的响应,如果没有收到来自客户端的响应客户端在特定时间内,客户端被认为是死的,并从主接收线程中的队列中删除。
但问题是“所有”x 个客户端如何告诉主接收线程他们各自的客户端处于非活动状态?如果这部分完成了,主Receiving Thread会不会要遍历整个Queue,找出client的死信息,然后如何删除呢?这对我来说真是令人困惑。
已经很久了,但我无法在我的应用程序中记录活跃的客户。
请尽快帮助我。提前致谢 :)
编辑: 另一个想法可能是队列有 x 个元素和每个客户端的状态。例如:最初对于 x 个客户:
Client# Status
1 0
2 0
3 0
. .
. .
. .
. .
x 0
每当新客户端变为活动状态时,状态就会从 0 更改为 1,而每当客户端出现故障时,状态就会从 1 更改回 0。
这似乎是正确的方法吗?