中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#怎么實現Socket通信

發布時間:2021-04-16 10:42:14 來源:億速云 閱讀:194 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關C#怎么實現Socket通信的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

代碼如下:

 //創建socket對象
            //第一個參數:設置網絡尋址的協議、第二參數設置數據傳輸的方式、第三個參數設置通信協議
            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.開啟監聽
            serverSocket.Listen(10);
            label5_Timer.Text = "開始監聽···";
 
            //4.開始接受客戶端的鏈接
            ThreadPool.QueueUserWorkItem(new WaitCallback(this.StartAcceptClient), serverSocket); 
        }
        public void StartAcceptClient(object state)
        {
            var serverSocket = (Socket)state;
            this.AppendTextLog("服務器開始接受客戶端的鏈接");
            while (true)
            {
                try
                {
                    Socket prosock = serverSocket.Accept();
                    //將遠程鏈接的客戶端的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("客戶端{0}鏈接上了", stinfo));
 
                    ClientProSocketList.Add(prosock);
                    //服務器接收客戶端的消息
                    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];
            //方法返回代表實際接受的數據的長度
            while (true)
            {
                int realen = 0;
                try
                {
                    realen = prosock.Receive(data, 0, data.Length, SocketFlags.None);
                }
                catch (Exception e)
                {
                    //異常退出
                    AppendTextLog(string.Format("設備 {0} 異常退出", prosock.RemoteEndPoint.ToString()));                  
                    StopCOnnecte(prosock);
                    return;
                }
                if (realen <= 0)
                {
                    //對方正常退出
 
                    AppendTextLog(string.Format("設備 {0} 正常退出:", prosock.RemoteEndPoint.ToString()));             
                    }
                    prosock.Shutdown(SocketShutdown.Both);
                    prosock.Close();
                    ClientProSocketList.Remove(prosock);
                    return;
                }
                //接受到的數據
                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);
            }
        }
//在粘貼代碼時可能有漏'{'或'}'

補充:C# Socket的Listen監聽方法

看代碼~

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

Listen方法的整型參數表示的是:排隊等待連接的最大數量,注意這個數量不包含已經連接的數量

感謝各位的閱讀!關于“C#怎么實現Socket通信”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

凤庆县| 梅河口市| 长治市| 巴塘县| 蓬安县| 茂名市| 开封县| 酉阳| 邓州市| 乌兰浩特市| 彰武县| 绥阳县| 且末县| 永安市| 布拖县| 彝良县| 射洪县| 扎兰屯市| 宜春市| 安化县| 旬邑县| 巴彦淖尔市| 集安市| 海晏县| 华亭县| 枣阳市| 诏安县| 阜平县| 泽普县| 衡山县| 保康县| 博野县| 涟水县| 乐亭县| 泾阳县| 德庆县| 集安市| 鄂州市| 桦南县| 于田县| 榆社县|