1 回答

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊
本質(zhì)上,您需要以某種方式跟蹤所有客戶端。這可以像跟蹤StreamWriter同步集合中的所有集合一樣簡單,并確保您在會(huì)話終止時(shí)將其從中刪除。例如:
StreamWriter Writer = new StreamWriter(client.GetStream(), Encoding.ASCII);
try {
lock(allClients) { allClients.Add(Writer); }
while (ClientConnected)
{
...
}
} finally {
lock(allClients) { allClients.Remove(Writer); }
}
現(xiàn)在,當(dāng)我們想向所有人發(fā)送消息時(shí),需要做一些事情。也許最簡單的事情是同步掃描:
lock(allClients) {
foreach(var writer in allClients)
try { writer.Send(message); } catch { /* log */ }
}
這將同步整個(gè)集合-只要這是唯一發(fā)送消息的位置,那么您就會(huì)知道a:您永遠(yuǎn)不會(huì)嘗試一次向同一套接字發(fā)送兩次,并且b:您不會(huì)通過添加/刪除套接字來中斷迭代器。
注意:這是多客戶端服務(wù)器的非常原始的基本實(shí)現(xiàn),實(shí)際上應(yīng)該僅用作本主題的介紹?!罢嬲摹倍嗫蛻舳说姆?wù)器應(yīng)該是多少更偏執(zhí)地認(rèn)為這一點(diǎn)。
- 1 回答
- 0 關(guān)注
- 356 瀏覽
添加回答
舉報(bào)