更新队列并从队列中删除所需的内容

时间:2013-06-10 05:53:57

标签: c windows multithreading visual-studio-2008 networking

因此,我陷入了一个非常混乱的局面,我将解释整个场景。

我开发了UDP服务器/多客户端应用程序。

服务器有一个主接收线程。每个想要与服务器通信的客户端首先向服务器发送带有一些ID的消息。服务器从客户端接收此消息。服务器有一个包含授权ID列表的文本文件。当从客户端收到消息时,服务器将从客户端接收的ID与其文本文件中可用的ID进行比较。如果客户端的ID与服务器的文本文件中的任何ID匹配,则认为该客户端已经过身份验证,并且为该客户端创建了一个新线程以及一个新的套接字。此新客户端的信息也会在包含所有活动客户端信息的队列中更新。

所有这一任务现在都已完成现在的问题是,由于每个客户端都有一个专用线程为其服务​​,我希望这些线程向其各自的客户端发送一些消息并等待客户端的响应,如果没有响应在特定时间内从客户端收到客户端被认为已死,并从主接收线程中的队列中删除。

但问题是“所有”x个客户端将如何告诉主要接收线程他们各自的客户端是不活动的?如果完成此部分,主接收线程是否必须遍历整个队列,找出客户端的信息已经死亡,然后将如何删除?这对我来说真是令人困惑。

已经很久了,但我无法在我的应用程序中保留一个活跃的客户端。

请尽快帮助我。在此先感谢:)

修改 另一个想法可能是Queue有x个元素和每个客户端的satus。例如:最初为x个客户:

Client#    Status

1            0

2            0

3            0

.            .

.            .

.            .

.            .

x            0

每当新客户端变为活动状态时,状态将从0更改为1,并且每当客户端关闭时,状态将从1更改为0。

这似乎是正确的方法吗?

1 个答案:

答案 0 :(得分:2)

我建议你使用Tcp。使用UDP,您必须自己做事。

  

我希望这些线程向其各自的客户发送一些消息   并等待客户的回复

首先:使队列或列表线程安全

传递List的id(index),其中存储有关客户端地址(client sockaddr)和其他信息(如state)的信息。在threadand内部使用索引来获取有关客户端的信息。获取客户端addr你可以向它发送消息。

  

如果完成此部分,主接收线程是否必须遍历   整个队列,找出客户的死信息   那怎么会被删除?这真是令人困惑的情况   我

您将遍历列表并获取客户端索引并更改状态。在客户端线程中,当您在特定时间内看到客户端状态未更改为活动状态时,您将从列表或队列中删除该客户端信息。

快乐的节目