最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# Socket通信的實(shí)現(xiàn)(同時監(jiān)聽多客戶端)

 更新時間:2021年04月16日 09:29:03   作者:WizradMyL  
這篇文章主要介紹了C# Socket通信的實(shí)現(xiàn)(同時監(jiān)聽多客戶端),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

看代碼~

 //創(chuàng)建socket對象
            //第一個參數(shù):設(shè)置網(wǎng)絡(luò)尋址的協(xié)議、第二參數(shù)設(shè)置數(shù)據(jù)傳輸?shù)姆绞健⒌谌齻€參數(shù)設(shè)置通信協(xié)議
            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //2.綁定IP端口
            string str = "127.0.0.1";
            int ports = 55555;
            IPAddress ip = IPAddress.Parse(str);
            IPEndPoint ipENdpoint = new IPEndPoint(ip, ports);
 
            serverSocket.Bind(ipENdpoint);
            //3.開啟監(jiān)聽
            serverSocket.Listen(10);
            label5_Timer.Text = "開始監(jiān)聽···";
 
            //4.開始接受客戶端的鏈接
            ThreadPool.QueueUserWorkItem(new WaitCallback(this.StartAcceptClient), serverSocket); 
        }
        public void StartAcceptClient(object state)
        {
            var serverSocket = (Socket)state;
            this.AppendTextLog("服務(wù)器開始接受客戶端的鏈接");
            while (true)
            {
                try
                {
                    Socket prosock = serverSocket.Accept();
                    //將遠(yuǎn)程鏈接的客戶端的IP地址和socket存入集合中
                    dicSocket.Add(prosock.RemoteEndPoint.ToString(), prosock);
                    string ipPort = prosock.RemoteEndPoint.ToString();
                    MedicineDevice ns = new MedicineDevice();
                    SQLMachine j = new SQLMachine();                   
 
                    j.MedicineDeviceStatus(ipPort, "在線");
                    //鏈接對象的信息
                    string stinfo = prosock.RemoteEndPoint.ToString();
                    this.AppendTextLog(string.Format("客戶端{(lán)0}鏈接上了", stinfo));
 
                    ClientProSocketList.Add(prosock);
                    //服務(wù)器接收客戶端的消息
                    ThreadPool.QueueUserWorkItem(new WaitCallback(this.ReceiveData), prosock);
                }
                catch (Exception e)
                {
                    return;
                    //throw;
                } 
            }
 public void ReceiveData(object obj)
        {
            var prosock = (Socket)obj;
            byte[] data = new byte[1024 * 1024];
            //方法返回代表實(shí)際接受的數(shù)據(jù)的長度
            while (true)
            {
                int realen = 0;
                try
                {
                    realen = prosock.Receive(data, 0, data.Length, SocketFlags.None);
                }
                catch (Exception e)
                {
                    //異常退出
                    AppendTextLog(string.Format("設(shè)備 {0} 異常退出", prosock.RemoteEndPoint.ToString()));                  
                    StopCOnnecte(prosock);
                    return;
                }
                if (realen <= 0)
                {
                    //對方正常退出
 
                    AppendTextLog(string.Format("設(shè)備 {0} 正常退出:", prosock.RemoteEndPoint.ToString()));             
                    }
                    prosock.Shutdown(SocketShutdown.Both);
                    prosock.Close();
                    ClientProSocketList.Remove(prosock);
                    return;
                }
                //接受到的數(shù)據(jù)
                string fromClientMsg = Encoding.Default.GetString(data, 0, realen);
                AppendTextLog(string.Format("接收到 {0} 的消息是:{1}", prosock.RemoteEndPoint.ToString(), fromClientMsg));}}
  private void StopCOnnecte(Socket prosock)
        {
            try
            {
                if (prosock.Connected)
                {
                    prosock.Shutdown(SocketShutdown.Both);
                    prosock.Close(100);
                }
            }
            catch (Exception ex)
            { 
            }
        }
 public void AppendTextLog(string txt)
        {
            if (textBox_Message.InvokeRequired)
            {
                textBox_Message.BeginInvoke(new Action<string>(s =>
                {
                    this.textBox_Message.Text = string.Format("{0}\r\n{1}", s, textBox_Message.Text);
                }
                    ), txt);
                //同步方法
                //textBox_Message.Invoke(new Action<string>(s =>
                //    {
                //        this.textBox_Message.Text = string.Format("{0}\r\n{1}", s, textBox_Message.Text);
                //    }
                //    ), txt);
            }
            else
            {
                this.textBox_Message.Text = string.Format("{0}\r\n{1}", txt, textBox_Message.Text);
            }
        }
//在粘貼代碼時可能有漏'{'或'}'

補(bǔ)充:C# Socket的Listen監(jiān)聽方法

看代碼~

 _serverSocket.Listen(10);
  public void Listen(int backlog);

Listen方法的整型參數(shù)表示的是:排隊(duì)等待連接的最大數(shù)量,注意這個數(shù)量不包含已經(jīng)連接的數(shù)量

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

最新評論

治县。| 石柱| 云安县| 阆中市| 淮滨县| 达孜县| 东阳市| 平塘县| 洪雅县| 山阳县| 唐海县| 舒兰市| 大同县| 丰台区| 荃湾区| 科技| 通州区| 托克逊县| 霍林郭勒市| 阿拉善右旗| 友谊县| 乌拉特前旗| 醴陵市| 霍山县| 象山县| 东辽县| 会理县| 南靖县| 沙河市| 湛江市| 黄山市| 凭祥市| 城市| 泰宁县| 彰化县| 石阡县| 万年县| 建湖县| 巴塘县| 榆林市| 延津县|