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

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

      時(shí)間:2021-07-11 23:29來(lái)源:未知 作者: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ù)端開(kāi)啟服務(wù),然后客戶端才可以去連接,如果服務(wù)端沒(méi)有開(kāi)啟通信服務(wù)或者連接之后再中途因?yàn)槟承┰驍嚅_(kāi)連接了,那么都是會(huì)通信失敗的,所以我們這篇博客主要是對(duì)TCP通信加入兩個(gè)機(jī)制。1,客戶端開(kāi)啟后未連接成功,自動(dòng)重連請(qǐng)求 2,若通信途中因?yàn)槟承┰驍嚅_(kāi)連接了自動(dòng)重連機(jī)制  因?yàn)闇y(cè)試發(fā)現(xiàn)如果是程序運(yùn)行途中我們利用同步的方式重新連接的話連接時(shí)會(huì)出現(xiàn)程序卡頓的情況,這個(gè)對(duì)用戶的體驗(yàn)是非常不好的,為了避免這個(gè)情況,我們采用的是異步TCP通信的方式,代碼如下,這是一個(gè)單例腳本,無(wú)需掛載,程序開(kāi)始時(shí)調(diào)用一下ConnectServer方法開(kāi)啟通信就好,記得關(guān)閉程序時(shí)要調(diào)用一下Close方法來(lái)斷開(kāi)掛起的異步連接,否則調(diào)試的時(shí)候通信會(huì)一直保存著。

      • /***********************************
      •  
        * Description:異步TCP客戶端
      •  
        * Mountpoint:這是一個(gè)單例腳本,無(wú)需掛載,直接調(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ī)范命名、添加注釋、合理封裝、限制訪問(wèn)權(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);//開(kāi)始異步
      •  
        }
      •  
        catch (Exception e)
      •  
        {
      •  
        Debug.Log(e.Message);
      •  
        }
      •  
        }
      •  
         
      •  
        //連接判斷
      •  
        void Lianjie(IAsyncResult ar)
      •  
        {
      •  
        if (!tcpClient.Connected)
      •  
        {
      •  
        Debug.Log("服務(wù)器未開(kāi)啟,嘗試重連。。。。。。");
      •  
        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);
      •  
        //將接收到的消息寫(xiě)入日志
      •  
        //Debuger.Log(string.Format("收到主機(jī):{0}發(fā)來(lái)的消息|{1}", ip1, str));
      •  
        //Debug.Log(str);
      •  
        tcpClient.GetStream().BeginRead(ReadBytes, 0, ReadBytes.Length, ReceiveCallBack, null);
      •  
        }
      •  
        else
      •  
        {
      •  
        tcpClient = null;
      •  
        Debug.Log("連接斷開(kāi),嘗試重連。。。。。。");
      •  
        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);//開(kāi)始異步發(fā)送
      •  
        }
      •  
         
      •  
        /// <summary>
      •  
        /// 斷開(kāi)連接
      •  
        /// </summary>
      •  
        public void Close()
      •  
        {
      •  
        if (tcpClient != null && tcpClient.Client.Connected)
      •  
        tcpClient.Close();
      •  
        if (!tcpClient.Client.Connected)
      •  
        {
      •  
        tcpClient.Close();//斷開(kāi)掛起的異步連接
      •  
        }
      •  
        }
      •  
         
      •  
        }
      •  
        }
      (責(zé)任編輯:admin)本文地址:http://m.bmm520.net/info/net/2021/0711/22470.html

      推薦資訊

      亚洲aⅴ天堂av天堂无码麻豆| 亚洲av片不卡无码久久| 亚洲成a人片在线观看日本麻豆| 亚洲日本中文字幕区| 亚洲无码日韩精品第一页| 亚洲精品国产日韩| 亚洲日产2021三区| 亚洲色偷偷av男人的天堂| 久久亚洲私人国产精品vA | 久久亚洲精品无码| 亚洲精品~无码抽插| 亚洲午夜国产精品无码老牛影视| 精品亚洲国产成人av| 精品国产日韩亚洲一区91| 理论亚洲区美一区二区三区| 青青青亚洲精品国产| 国产精品手机在线亚洲| 亚洲VA综合VA国产产VA中| 亚洲精品99久久久久中文字幕| 亚洲精品无码久久毛片| 亚洲第一网站男人都懂| 中文字幕亚洲激情| 国产亚洲人成网站在线观看不卡| 国产亚洲福利精品一区| 亚洲情a成黄在线观看动漫尤物| 午夜亚洲国产理论秋霞| 亚洲精品电影在线| 亚洲免费福利视频| 亚洲熟女精品中文字幕| 亚洲av无码偷拍在线观看| 国产亚洲蜜芽精品久久| 亚洲免费在线观看| 国产亚洲av片在线观看播放| 亚洲国产成人精品不卡青青草原| 亚洲综合一区二区精品导航| 亚洲乱码一二三四区国产| 亚洲日韩AV无码一区二区三区人| 婷婷亚洲综合一区二区| 中文字幕精品无码亚洲字| 亚洲AV午夜福利精品一区二区 | 亚洲AV第一页国产精品|