欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#以太網(wǎng)Sockets客戶端設(shè)計(jì)實(shí)現(xiàn)

 更新時(shí)間:2023年02月06日 14:24:42   作者:cfqq1989  
本文主要介紹了C#以太網(wǎng)Sockets客戶端設(shè)計(jì)實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

【1】客戶端對(duì)象

using System.Net;// DNS_靜態(tài)對(duì)象
using System.Net.Sockets;
 
// 字段位置
private Socket socket業(yè)務(wù);  //對(duì)象既可以當(dāng)服務(wù)器,又可以當(dāng)客戶端
TcpListener tcpListener;   //服務(wù)器對(duì)象
TcpClient tcpClient;       //客戶端對(duì)象

【2】初始化

Socket tcpClient客戶端;

tcpClient客戶端 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

【3】連接

 #region 連接
 
        /// <summary>
        /// 建立連接
        /// </summary>
        /// <param name="ip">IP地址</param>
        /// <param name="port">端口號(hào)</param>
        public void Connect(string ip, string port)
        {
            try
            {
                //實(shí)例化Socket
                tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 
                //設(shè)置Socket屬性
                tcpClient.SendTimeout = this.SendTimeOut;
 
                tcpClient.ReceiveTimeout = this.ReceiveTimeOut;
 
                //封裝一個(gè)EndPoint對(duì)象
                IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(ip), int.Parse(port));
 
                //建立連接
                tcpClient.Connect(endPoint);
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }//顯示錯(cuò)誤
        }
 
        #endregion

【4】收發(fā)

  #region 讀取并接受
 
        /// <summary>
        /// 發(fā)送并接受
        /// </summary>
        /// <param name="SendByte"></param>
        /// <returns></returns>
        public byte[] SendAndReceive(byte[] SendByte)
        {
            try
            {
                if (tcpClient.Available >= 1)//   丟棄字節(jié)
                {
                    #region 加載
                    byte[] buffer = new byte[tcpClient.Available];//準(zhǔn)備加載
                    tcpClient.Receive(buffer, buffer.Length, SocketFlags.None);//開(kāi)始加載
                    #endregion
                }
                #region 計(jì)時(shí)
                //====現(xiàn)在時(shí)間======================================
                str_發(fā)送后記時(shí) = new StringBuilder(String.Format("{0,9}",
                    DateTime.Now.Second.ToString() + "s"
                    + DateTime.Now.Millisecond.ToString() + "ms:"));  //固定長(zhǎng)度9 右對(duì)齊
                #endregion
                tcpClient.Send(SendByte);// 發(fā)送
               
                #region 委托
                if (Help_ModBus.Wt_set != null)
                {
                    Help_ModBus.Wt_set(SendByte, str_發(fā)送后記時(shí).ToString());
                }
                #endregion
 
                return ReadMessage();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }//顯示錯(cuò)誤
            finally
            {
                //InteractiveLock.Leave();
            }
            return null;
        }
 
 
        /// <summary>
        /// 讀取緩沖區(qū)值
        /// </summary>
        /// <returns></returns>
        private byte[] ReadMessage()
        {
            DateTime startTime = DateTime.Now;//記錄開(kāi)始時(shí)間
            do
            {
                if (tcpClient.Available >= 5 )//   字節(jié)
                {
                    #region 計(jì)時(shí)
                    //====現(xiàn)在時(shí)間======================================
                    str_發(fā)送后記時(shí) = new StringBuilder(String.Format("{0,9}",
                        DateTime.Now.Second.ToString() + "s"
                        + DateTime.Now.Millisecond.ToString() + "ms:"));  //固定長(zhǎng)度9 右對(duì)齊
                    #endregion
                    #region 加載
                    byte[] buffer = new byte[tcpClient.Available];//準(zhǔn)備加載
                    tcpClient.Receive(buffer, buffer.Length, SocketFlags.None);//開(kāi)始加載
                    #endregion
                    #region 委托
                    if (Help_ModBus.Wt_get != null)//委托呼叫ui
                    {
                        Help_ModBus.Wt_get(buffer, str_發(fā)送后記時(shí).ToString());// ui顯示
                    }
                    #endregion
                    return buffer;
                }
                #region 超時(shí)跳出
                if ((DateTime.Now - startTime).TotalMilliseconds > ReceiveTimeOut+500)// 超時(shí) 1.5s
                {
                    break;// 已經(jīng)超時(shí)
                }
                #endregion
 
            } while (true);
            return null; // 相當(dāng)失敗
 
 
 
            //Thread.Sleep(ReceiveTimeOut);// 延時(shí)15ms
            //int count = tcpClient.Available;  //  字節(jié)
            //if (count == 0)
            //{
            //    return null;
            //}
            //else
            //{
            //    byte[] buffer = new byte[count];
            //    tcpClient.Receive(buffer, count, SocketFlags.None);
            //    //byte[] buffer2 = Encoding.Default.GetBytes(str_發(fā)送后記時(shí).ToString());
            //    byte[] buffer3 = { buffer2 , buffer };
            //    //return buffer2;
            //    #region 計(jì)時(shí)
            //    //====現(xiàn)在時(shí)間======================================
            //    str_發(fā)送后記時(shí) = new StringBuilder(String.Format("{0,9}",
            //        DateTime.Now.Second.ToString() + "s"
            //        + DateTime.Now.Millisecond.ToString() + "ms:"));  //固定長(zhǎng)度9 右對(duì)齊
            //    #endregion
            //    if (Wt_get!=null)
            //    {
            //        Wt_get(buffer, str_發(fā)送后記時(shí).ToString());
            //    }
            //    return buffer;
            //}
 
            //==================================
            //int count = tcpClient.Available;
            //int cycletimer = 0;
            //while (count == 0)
            //{
            //    count = tcpClient.Available;
            //    cycletimer++;
            //    Thread.Sleep(20);
            //    if (cycletimer > MaxCycleTimer)
            //    {
            //        break;
            //    }
            //}
            //if (count == 0)
            //{
            //    return null;
            //}
            //else
            //{
            //    byte[] buffer = new byte[count];
            //    tcpClient.Receive(buffer, count, SocketFlags.None);
            //    return buffer;
            //}
        }
        #endregion

【5】斷開(kāi)

 #region 斷開(kāi)
        /// <summary>
        /// 斷開(kāi)連接
        /// </summary>
        public void DisConnect()
        {
            if (tcpClient != null)
            {
                tcpClient.Close();
            }
        }
 
        #endregion

參數(shù)參考:

C#以太網(wǎng)Sockets服務(wù)器設(shè)計(jì)

到此這篇關(guān)于C#以太網(wǎng)Sockets客戶端設(shè)計(jì)實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C#以太網(wǎng)Sockets客戶端內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#操作注冊(cè)表的方法詳解

    C#操作注冊(cè)表的方法詳解

    這篇文章主要介紹了C#操作注冊(cè)表的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了C#針對(duì)注冊(cè)表的創(chuàng)建、打開(kāi)、讀取、寫(xiě)入、修改、刪除等技巧,需要的朋友可以參考下
    2015-12-12
  • 詳解MongoDB for C#基礎(chǔ)入門(mén)

    詳解MongoDB for C#基礎(chǔ)入門(mén)

    本篇文章主要介紹了MongoDB for C#基礎(chǔ)入門(mén),具體介紹了c#中關(guān)于對(duì)MongoDB的連接,插入,查詢等,有需要的可以了解一下。
    2016-12-12
  • C# WinForm國(guó)際化實(shí)現(xiàn)的簡(jiǎn)單方法

    C# WinForm國(guó)際化實(shí)現(xiàn)的簡(jiǎn)單方法

    這篇文章主要介紹了C# WinForm國(guó)際化實(shí)現(xiàn)的簡(jiǎn)單方法,有需要的朋友可以參考一下
    2014-01-01
  • C#判斷ip地址是否可以ping的通

    C#判斷ip地址是否可以ping的通

    這篇文章主要介紹了ip地址是否可以ping的通的方法,使用到了C#,需要的朋友可以參考下
    2014-06-06
  • C#中的yield關(guān)鍵字的使用方法介紹

    C#中的yield關(guān)鍵字的使用方法介紹

    yield這個(gè)關(guān)鍵字是和迭代器掛鉤的,而且是與return一起以yield return的形式合用的,用來(lái)返回迭代器中的條目。
    2013-04-04
  • C#中dynamic的使用方法及應(yīng)用場(chǎng)景

    C#中dynamic的使用方法及應(yīng)用場(chǎng)景

    在 C# 編程中,dynamic 類(lèi)型是一個(gè)非常特殊的類(lèi)型,它在編譯時(shí)并不會(huì)進(jìn)行類(lèi)型檢查,而是在運(yùn)行時(shí)才進(jìn)行類(lèi)型解析,本文將詳細(xì)講解 dynamic 的使用方法、優(yōu)缺點(diǎn)以及一些實(shí)際應(yīng)用場(chǎng)景,需要的朋友可以參考下
    2024-08-08
  • 淺談Unity中的Shader

    淺談Unity中的Shader

    Shader,中文名為著色器,對(duì)很多開(kāi)發(fā)者來(lái)說(shuō)它是一個(gè)神秘的存在。Shader其實(shí)就是專(zhuān)門(mén)用來(lái)渲染圖形的一種技術(shù),通過(guò)shader,我們可以自定義顯卡渲染畫(huà)面的算法,使畫(huà)面達(dá)到我們想要的效果
    2021-06-06
  • C#日期格式化的幾個(gè)要點(diǎn)小結(jié)

    C#日期格式化的幾個(gè)要點(diǎn)小結(jié)

    本文將介紹C#日期格式化的幾個(gè)要點(diǎn),包括標(biāo)準(zhǔn) DateTime 格式字符串。希望大家能從中得到更多的理解和幫助
    2013-09-09
  • 一個(gè)可逆加密的類(lèi)(使用3DES加密)

    一個(gè)可逆加密的類(lèi)(使用3DES加密)

    表示三重?cái)?shù)據(jù)加密標(biāo)準(zhǔn)算法的基類(lèi),TripleDES 的所有實(shí)現(xiàn)都必須從此基類(lèi)派生。是從 SymmetricAlgorithm 類(lèi)里繼承出來(lái)。
    2011-07-07
  • C# WinForm 判斷程序是否已經(jīng)在運(yùn)行,且只允許運(yùn)行一個(gè)實(shí)例,附源碼

    C# WinForm 判斷程序是否已經(jīng)在運(yùn)行,且只允許運(yùn)行一個(gè)實(shí)例,附源碼

    本文主要介紹WinFrom程序中只允許運(yùn)行一個(gè)實(shí)例的方法,并有完整的代碼示例,希望能給需要的朋友一些幫助。
    2016-04-04

最新評(píng)論