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

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

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

看代碼~

 //創(chuàng)建socket對(duì)象
            //第一個(gè)參數(shù):設(shè)置網(wǎng)絡(luò)尋址的協(xié)議、第二參數(shù)設(shè)置數(shù)據(jù)傳輸?shù)姆绞?、第三個(gè)參數(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.開(kāi)啟監(jiān)聽(tīng)
            serverSocket.Listen(10);
            label5_Timer.Text = "開(kāi)始監(jiān)聽(tīng)···";
 
            //4.開(kāi)始接受客戶端的鏈接
            ThreadPool.QueueUserWorkItem(new WaitCallback(this.StartAcceptClient), serverSocket); 
        }
        public void StartAcceptClient(object state)
        {
            var serverSocket = (Socket)state;
            this.AppendTextLog("服務(wù)器開(kāi)始接受客戶端的鏈接");
            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, "在線");
                    //鏈接對(duì)象的信息
                    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ù)的長(zhǎng)度
            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)
                {
                    //對(duì)方正常退出
 
                    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);
            }
        }
//在粘貼代碼時(shí)可能有漏'{'或'}'

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

看代碼~

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

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

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

相關(guān)文章

最新評(píng)論

分宜县| 微博| 荣昌县| 浙江省| 库尔勒市| 五家渠市| 临泉县| 收藏| 称多县| 安吉县| 霞浦县| 抚顺市| 资源县| 察哈| 驻马店市| 文化| 阳泉市| 新郑市| 陆河县| 石家庄市| 土默特右旗| 桐乡市| 吉安市| 汉中市| 富平县| 阳泉市| 沙田区| 烟台市| 舒城县| 新营市| 紫金县| 长海县| 利津县| 巩留县| 墨脱县| 宾川县| 丰城市| 朝阳县| 酒泉市| 郓城县| 河津市|