第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

TCP聊天:服務(wù)器發(fā)送到多個(gè)客戶端

TCP聊天:服務(wù)器發(fā)送到多個(gè)客戶端

C#
縹緲止盈 2021-04-02 08:26:31
所以我正在使用TCP協(xié)議進(jìn)行C#聊天,我想不通如何使服務(wù)器將客戶端接收到的數(shù)據(jù)發(fā)送給與之連接的所有客戶端。因此,我嘗試將所有客戶端放入一個(gè)arraylist中,并使用“ foreach”向其發(fā)送服務(wù)器接收的數(shù)據(jù)(如本主題中所述),但失敗了。為了發(fā)送和接收數(shù)據(jù),我使用Streams(StreamWriter / StreamReader)。每個(gè)客戶端由服務(wù)器在不同的線程中處理。問題:如何將數(shù)據(jù)同時(shí)發(fā)送到所有客戶端?服務(wù)器 :static void LoopClients(){    while (running)    {        TcpClient newClient = server.AcceptTcpClient();        arrClient.add(newClient)        Console.WriteLine("Connection accepted from " + ((IPEndPoint)newClient.Client.RemoteEndPoint).Address);        Thread t = new Thread(new ParameterizedThreadStart(HandleClient));        t.Start(newClient);    }}static void HandleClient(object obj){    TcpClient client = (TcpClient)obj;    StreamWriter Writer = new StreamWriter(client.GetStream(), Encoding.ASCII);    StreamReader Reader = new StreamReader(client.GetStream(), Encoding.ASCII);    Boolean ClientConnected = true;    String Data = null;    var LEP = client.Client.RemoteEndPoint as IPEndPoint;    var LAD = LEP.Address;    while (ClientConnected)    {        Data = Reader.ReadLine();        Console.WriteLine(""+ LAD + " : " + Data);        Writer.WriteLine(LAD+" : "+Data+"");        Writer.Flush();    }}謝謝你 !
查看完整描述

1 回答

?
繁華開滿天機(jī)

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)。


查看完整回答
反對 回復(fù) 2021-04-10
  • 1 回答
  • 0 關(guān)注
  • 356 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號