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

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

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

【1】客戶端對象

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

【2】初始化

Socket tcpClient客戶端;

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

【3】連接

 #region 連接
 
        /// <summary>
        /// 建立連接
        /// </summary>
        /// <param name="ip">IP地址</param>
        /// <param name="port">端口號</param>
        public void Connect(string ip, string port)
        {
            try
            {
                //實例化Socket
                tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 
                //設置Socket屬性
                tcpClient.SendTimeout = this.SendTimeOut;
 
                tcpClient.ReceiveTimeout = this.ReceiveTimeOut;
 
                //封裝一個EndPoint對象
                IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(ip), int.Parse(port));
 
                //建立連接
                tcpClient.Connect(endPoint);
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }//顯示錯誤
        }
 
        #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];//準備加載
                    tcpClient.Receive(buffer, buffer.Length, SocketFlags.None);//開始加載
                    #endregion
                }
                #region 計時
                //====現(xiàn)在時間======================================
                str_發(fā)送后記時 = new StringBuilder(String.Format("{0,9}",
                    DateTime.Now.Second.ToString() + "s"
                    + DateTime.Now.Millisecond.ToString() + "ms:"));  //固定長度9 右對齊
                #endregion
                tcpClient.Send(SendByte);// 發(fā)送
               
                #region 委托
                if (Help_ModBus.Wt_set != null)
                {
                    Help_ModBus.Wt_set(SendByte, str_發(fā)送后記時.ToString());
                }
                #endregion
 
                return ReadMessage();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }//顯示錯誤
            finally
            {
                //InteractiveLock.Leave();
            }
            return null;
        }
 
 
        /// <summary>
        /// 讀取緩沖區(qū)值
        /// </summary>
        /// <returns></returns>
        private byte[] ReadMessage()
        {
            DateTime startTime = DateTime.Now;//記錄開始時間
            do
            {
                if (tcpClient.Available >= 5 )//   字節(jié)
                {
                    #region 計時
                    //====現(xiàn)在時間======================================
                    str_發(fā)送后記時 = new StringBuilder(String.Format("{0,9}",
                        DateTime.Now.Second.ToString() + "s"
                        + DateTime.Now.Millisecond.ToString() + "ms:"));  //固定長度9 右對齊
                    #endregion
                    #region 加載
                    byte[] buffer = new byte[tcpClient.Available];//準備加載
                    tcpClient.Receive(buffer, buffer.Length, SocketFlags.None);//開始加載
                    #endregion
                    #region 委托
                    if (Help_ModBus.Wt_get != null)//委托呼叫ui
                    {
                        Help_ModBus.Wt_get(buffer, str_發(fā)送后記時.ToString());// ui顯示
                    }
                    #endregion
                    return buffer;
                }
                #region 超時跳出
                if ((DateTime.Now - startTime).TotalMilliseconds > ReceiveTimeOut+500)// 超時 1.5s
                {
                    break;// 已經(jīng)超時
                }
                #endregion
 
            } while (true);
            return null; // 相當失敗
 
 
 
            //Thread.Sleep(ReceiveTimeOut);// 延時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ā)送后記時.ToString());
            //    byte[] buffer3 = { buffer2 , buffer };
            //    //return buffer2;
            //    #region 計時
            //    //====現(xiàn)在時間======================================
            //    str_發(fā)送后記時 = new StringBuilder(String.Format("{0,9}",
            //        DateTime.Now.Second.ToString() + "s"
            //        + DateTime.Now.Millisecond.ToString() + "ms:"));  //固定長度9 右對齊
            //    #endregion
            //    if (Wt_get!=null)
            //    {
            //        Wt_get(buffer, str_發(fā)送后記時.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】斷開

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

參數(shù)參考:

C#以太網(wǎng)Sockets服務器設計

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

相關(guān)文章

  • C#連接MySQL數(shù)據(jù)庫的方法步驟

    C#連接MySQL數(shù)據(jù)庫的方法步驟

    最近兩天在解決C#連接MySql數(shù)據(jù)庫的問題,通過不同的從網(wǎng)上學習,最終找到了解決的辦法,下面這篇文章主要給大家介紹了關(guān)于C#連接MySQL數(shù)據(jù)庫的方法步驟,需要的朋友可以參考下
    2023-01-01
  • 淺談C#設計模式之代理模式

    淺談C#設計模式之代理模式

    這篇文章主要介紹了淺談C#設計模式之代理模式,需要的朋友可以參考下
    2014-12-12
  • C#多線程編程中的鎖系統(tǒng)基本用法

    C#多線程編程中的鎖系統(tǒng)基本用法

    這篇文章主要介紹了C#多線程編程中的鎖系統(tǒng)基本用法,本文講解了lock、Monitor、mutex、Semaphore等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • C#中foreach原理以及模擬的實現(xiàn)

    C#中foreach原理以及模擬的實現(xiàn)

    這篇文章主要介紹了C#中foreach原理以及模擬的實現(xiàn)方法,備有詳盡的注釋,便于深入理解C#原理,需要的朋友可以參考下
    2014-10-10
  • Windows系統(tǒng)中C#讀寫ini配置文件的程序代碼示例分享

    Windows系統(tǒng)中C#讀寫ini配置文件的程序代碼示例分享

    這篇文章主要介紹了C#讀寫ini配置文件的程序代碼示例分享,在Windows下可以利用Win32的API函數(shù)輕松實現(xiàn),需要的朋友可以參考下
    2016-04-04
  • C#實現(xiàn)訪問Web API Url提交數(shù)據(jù)并獲取處理結(jié)果

    C#實現(xiàn)訪問Web API Url提交數(shù)據(jù)并獲取處理結(jié)果

    Web API  是 Web 服務器和 Web 瀏覽器之間的應用程序處理接口,我們常見的模式是訪問 Web API Url 地址,并獲取 Json 、XML或其它指定格式的處理結(jié)果, 本文我們介紹了使用C#實現(xiàn)訪問Web API Url提交數(shù)據(jù)并獲取處理結(jié)果,需要的朋友可以參考下
    2024-05-05
  • C#中using語句的用法

    C#中using語句的用法

    這篇文章介紹了C#中using語句的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • C#實現(xiàn)時間戳與標準時間的互轉(zhuǎn)

    C#實現(xiàn)時間戳與標準時間的互轉(zhuǎn)

    本文主要介紹了C#中時間戳與標準時間互轉(zhuǎn)的方法,其中需要注意的是基準時間的問題。文中的示例代碼具有一定的學習價值,快來跟隨小編一起了解一下吧
    2021-12-12
  • C#中使用1.7版本驅(qū)動操作MongoDB簡單例子

    C#中使用1.7版本驅(qū)動操作MongoDB簡單例子

    這篇文章主要介紹了C#中使用1.7版本驅(qū)動操作MongoDB簡單例子,本文給出了連接MongoDB、操作MongoDB數(shù)據(jù)等例子,需要的朋友可以參考下
    2015-01-01
  • 基于C#實現(xiàn)屏幕桌面截圖

    基于C#實現(xiàn)屏幕桌面截圖

    這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)屏幕桌面截圖以及左上角區(qū)域截圖功能,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以了解一下
    2022-12-12

最新評論

遵义县| 肥城市| 广宗县| 兰西县| 广丰县| 句容市| 建湖县| 文安县| 嘉峪关市| 新晃| 任丘市| 周至县| 揭东县| 连云港市| 遵化市| 墨竹工卡县| 若羌县| 佛坪县| 新余市| 延吉市| 兴和县| 防城港市| 宣城市| 富宁县| 昌图县| 浦北县| 涿州市| 南丰县| 望谟县| 南宫市| 铜陵市| 简阳市| 化隆| 衢州市| 康马县| 丹阳市| 洪湖市| 达孜县| 叶城县| 昌黎县| 霸州市|