歡迎您的來訪!有源碼,好建站(m.bmm520.net)源碼海洋源碼網(wǎng)為您提供快速建站平臺(tái).
      當(dāng)前位置: 首頁 > 行業(yè)資訊 > c# .net 資料 >

      C# Socket之異步TCP客戶端斷線重連

      時(shí)間:2021-07-11 23:29來源:未知 作者:admin 點(diǎn)擊:
      本文章向大家介紹C# Socket之異步TCP客戶端斷線重連,主要包括C# Socket之異步TCP客戶端斷線重連使用實(shí)例、應(yīng)用技巧、基本知識(shí)點(diǎn)總結(jié)和需要注意事項(xiàng),具有一定的參考價(jià)值,需要的朋友可以參考一下。 我們知道TCP通信是一種面向連接的Socket,針對(duì)于面向連接

      本文章向大家介紹C# Socket之異步TCP客戶端斷線重連,主要包括C# Socket之異步TCP客戶端斷線重連使用實(shí)例、應(yīng)用技巧、基本知識(shí)點(diǎn)總結(jié)和需要注意事項(xiàng),具有一定的參考價(jià)值,需要的朋友可以參考一下。

       

              我們知道TCP通信是一種面向連接的Socket,針對(duì)于面向連接的TCP服務(wù)應(yīng)用,安全,但是效率低,它首先需要服務(wù)端開啟服務(wù),然后客戶端才可以去連接,如果服務(wù)端沒有開啟通信服務(wù)或者連接之后再中途因?yàn)槟承┰驍嚅_連接了,那么都是會(huì)通信失敗的,所以我們這篇博客主要是對(duì)TCP通信加入兩個(gè)機(jī)制。1,客戶端開啟后未連接成功,自動(dòng)重連請求 2,若通信途中因?yàn)槟承┰驍嚅_連接了自動(dòng)重連機(jī)制  因?yàn)闇y試發(fā)現(xiàn)如果是程序運(yùn)行途中我們利用同步的方式重新連接的話連接時(shí)會(huì)出現(xiàn)程序卡頓的情況,這個(gè)對(duì)用戶的體驗(yàn)是非常不好的,為了避免這個(gè)情況,我們采用的是異步TCP通信的方式,代碼如下,這是一個(gè)單例腳本,無需掛載,程序開始時(shí)調(diào)用一下ConnectServer方法開啟通信就好,記得關(guān)閉程序時(shí)要調(diào)用一下Close方法來斷開掛起的異步連接,否則調(diào)試的時(shí)候通信會(huì)一直保存著。

      • /***********************************
      •  
        * Description:異步TCP客戶端
      •  
        * Mountpoint:這是一個(gè)單例腳本,無需掛載,直接調(diào)用即可
      •  
        * Date:2019.06.25
      •  
        * Version:unity版本2017.2.0f3
      •  
        * Author:LJF
      •  
        ***********************************/
      •  
        using System.Collections;
      •  
        using System.Collections.Generic;
      •  
        using UnityEngine;
      •  
        using System.Net;
      •  
        using System.Net.Sockets;
      •  
        using System;
      •  
        using System.Text;
      •  
         
      •  
         
      •  
        namespace LJF
      •  
        {
      •  
        //規(guī)范命名、添加注釋、合理封裝、限制訪問權(quán)限
      •  
        public class AsyncTcpClient
      •  
        {
      •  
        private string ip1;
      •  
        private int port1;
      •  
        byte[] ReadBytes = new byte[1024 * 1024];
      •  
        //單例
      •  
        public static AsyncTcpClient Instance
      •  
        {
      •  
        get
      •  
        {
      •  
        if (instance==null)
      •  
        {
      •  
        instance = new AsyncTcpClient();
      •  
        }
      •  
        return instance;
      •  
        }
      •  
        }
      •  
        private static AsyncTcpClient instance;
      •  
         
      •  
        System.Net.Sockets.TcpClient tcpClient;
      •  
         
      •  
        //連接服務(wù)器
      •  
        public void ConnectServer(string ip, int port)
      •  
        {
      •  
        //Debuger.EnableSave = true;
      •  
        ip1 = ip;
      •  
        port1 = port;
      •  
        try
      •  
        {
      •  
        tcpClient = new System.Net.Sockets.TcpClient();//構(gòu)造Socket
      •  
        tcpClient.BeginConnect(IPAddress.Parse(ip), port,Lianjie, null);//開始異步
      •  
        }
      •  
        catch (Exception e)
      •  
        {
      •  
        Debug.Log(e.Message);
      •  
        }
      •  
        }
      •  
         
      •  
        //連接判斷
      •  
        void Lianjie(IAsyncResult ar)
      •  
        {
      •  
        if (!tcpClient.Connected)
      •  
        {
      •  
        Debug.Log("服務(wù)器未開啟,嘗試重連。。。。。。");
      •  
        tcpClient.BeginConnect(IPAddress.Parse(ip1), port1, Lianjie, null);
      •  
        //IAsyncResult rest = tcpClient.BeginConnect(IPAddress.Parse(ip1), port1, Lianjie, null);
      •  
        //bool scu= rest.AsyncWaitHandle.WaitOne(3000);
      •  
        }
      •  
        else
      •  
        {
      •  
        Debug.Log("連接上了");
      •  
        tcpClient.EndConnect(ar);//結(jié)束異步連接
      •  
        tcpClient.GetStream().BeginRead(ReadBytes, 0, ReadBytes.Length, ReceiveCallBack, null);
      •  
        }
      •  
        }
      •  
         
      •  
         
      •  
        //接收消息
      •  
        void ReceiveCallBack(IAsyncResult ar)
      •  
        {
      •  
        try
      •  
        {
      •  
        int len = tcpClient.GetStream().EndRead(ar);//結(jié)束異步讀取
      •  
        if (len > 0)
      •  
        {
      •  
         
      •  
        string str = Encoding.UTF8.GetString(ReadBytes, 0,len);
      •  
        str = Uri.UnescapeDataString(str);
      •  
        //將接收到的消息寫入日志
      •  
        //Debuger.Log(string.Format("收到主機(jī):{0}發(fā)來的消息|{1}", ip1, str));
      •  
        //Debug.Log(str);
      •  
        tcpClient.GetStream().BeginRead(ReadBytes, 0, ReadBytes.Length, ReceiveCallBack, null);
      •  
        }
      •  
        else
      •  
        {
      •  
        tcpClient = null;
      •  
        Debug.Log("連接斷開,嘗試重連。。。。。。");
      •  
        ConnectServer(ip1,port1);
      •  
        }
      •  
        }
      •  
        catch (Exception e)
      •  
        {
      •  
        Debug.Log(e.Message);
      •  
        }
      •  
        }
      •  
         
      •  
        //發(fā)送消息
      •  
        public void SendMsg(string msg)
      •  
        {
      •  
        byte[] msgBytes = Encoding.UTF8.GetBytes(msg);
      •  
        tcpClient.GetStream().BeginWrite(msgBytes, 0, msgBytes.Length, (ar) => {
      •  
        tcpClient.GetStream().EndWrite(ar);//結(jié)束異步發(fā)送
      •  
        }, null);//開始異步發(fā)送
      •  
        }
      •  
         
      •  
        /// <summary>
      •  
        /// 斷開連接
      •  
        /// </summary>
      •  
        public void Close()
      •  
        {
      •  
        if (tcpClient != null && tcpClient.Client.Connected)
      •  
        tcpClient.Close();
      •  
        if (!tcpClient.Client.Connected)
      •  
        {
      •  
        tcpClient.Close();//斷開掛起的異步連接
      •  
        }
      •  
        }
      •  
         
      •  
        }
      •  
        }
      (責(zé)任編輯:admin)本文地址:http://m.bmm520.net/info/net/2021/0711/22470.html

      推薦資訊

      国产精品亚洲精品日韩动图| 亚洲色偷偷色噜噜狠狠99| 亚洲国产精品一区| 亚洲avav天堂av在线网毛片| 国内精品久久久久影院亚洲| 亚洲爆乳精品无码一区二区三区| 蜜臀亚洲AV无码精品国产午夜.| 亚洲欧洲国产日韩精品| 亚洲色大成网站www永久网站| 亚洲一区二区三区自拍公司| 亚洲最大的成人网| 在线视频亚洲一区| 亚洲人精品亚洲人成在线| 亚洲av永久无码精品网站| 精品亚洲一区二区三区在线观看 | 日韩精品亚洲专区在线影视| 日本亚洲色大成网站www久久| 亚洲精品电影天堂网| 国产成人亚洲综合无| 亚洲精品无码久久久久YW| 亚洲va久久久噜噜噜久久天堂 | 亚洲精品乱码久久久久久下载| 亚洲高清无码综合性爱视频| 亚洲首页在线观看| 在线视频亚洲一区| 亚洲欧洲中文日韩久久AV乱码| 最新亚洲精品国偷自产在线| 亚洲一区二区三区精品视频 | 亚洲成色在线综合网站 | 亚洲av最新在线网址| 久久久久亚洲AV无码专区网站| 亚洲美国产亚洲AV| 亚洲国产精品精华液| 另类图片亚洲校园小说区| 亚洲一级毛片视频| 亚洲AV无码乱码在线观看富二代 | 亚洲无av在线中文字幕| 亚洲欧洲日产国码无码久久99 | 亚洲视频在线一区二区三区| 亚洲AV日韩精品一区二区三区| 亚洲av无码久久忘忧草|