1 回答
TA贡献1816条经验 获得超4个赞
本质上,您需要以某种方式跟踪所有客户端。这可以像跟踪StreamWriter同步集合中的所有集合一样简单,并确保您在会话终止时将其从中删除。例如:
StreamWriter Writer = new StreamWriter(client.GetStream(), Encoding.ASCII);
try {
lock(allClients) { allClients.Add(Writer); }
while (ClientConnected)
{
...
}
} finally {
lock(allClients) { allClients.Remove(Writer); }
}
现在,当我们想向所有人发送消息时,需要做一些事情。也许最简单的事情是同步扫描:
lock(allClients) {
foreach(var writer in allClients)
try { writer.Send(message); } catch { /* log */ }
}
这将同步整个集合-只要这是唯一发送消息的位置,那么您就会知道a:您永远不会尝试一次向同一套接字发送两次,并且b:您不会通过添加/删除套接字来中断迭代器。
注意:这是多客户端服务器的非常原始的基本实现,实际上应该仅用作本主题的介绍。“真正的”多客户端的服务器应该是多少更偏执地认为这一点。
- 1 回答
- 0 关注
- 378 浏览
添加回答
举报
