首页 > 编程语言 >C# Socket 心跳重连

C# Socket 心跳重连

时间:2023-10-17 10:33:35浏览次数:34  
标签:Socket C# Ip System HeartbeatTime client using 重连 Port

//需要引用  SuperSocket.ClientEngine

 

  1 using SuperSocket.ClientEngine;
  2 using System;
  3 using System.Collections.Generic;
  4 using System.Linq;
  5 using System.Text;
  6 using System.Net;
  7 using System.Threading.Tasks;
  8 
  9 namespace aaa.aaa.Core
 10 {
 11 public class MonitorClientCommCore
 12 {
 13 string _Ip = null;
 14 int _Port = 0;
 15 string _SendContent = null;
 16 static AsyncTcpSession client;
 17 static System.Timers.Timer timer = null;
 18 int _HeartbeatTime = 0;
 19 public MonitorClientCommCore(string Ip, int Port, string SendContent, int HeartbeatTime = 1)
 20 {
 21 this._Ip = Ip;
 22 this._Port = Port;
 23 this._SendContent = SendContent;
 24 this._HeartbeatTime = HeartbeatTime;
 25 }
 26 public void Start()
 27 {
 28 try
 29 {
 30 Link(_HeartbeatTime);
 31 while (true)
 32 {
 33 if (client != null && client.IsConnected)
 34 {
 35 Thread.Sleep(5000);
 36 var msg = System.Text.Encoding.UTF8.GetBytes("echo hello " + _SendContent + "\r\n");
 37 client.Send(msg, 0, msg.Length);
 38 }
 39 }
 40 }
 41 catch (Exception ex)
 42 {
 43 Link(_HeartbeatTime);
 44 Log.Error("时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "--错误:" + ex.Message);
 45 }
 46 }
 47 
 48 /// <summary>
 49 /// 心跳重连时间
 50 /// </summary>
 51 /// <param name="HeartbeatTime"></param>
 52 public void Link(int HeartbeatTime)
 53 {
 54 HeartbeatTime = HeartbeatTime * 1000;
 55 client = new AsyncTcpSession();
 56 client.Connected += OnClientConnected;
 57 client.Error += OnClientError;
 58 client.Closed += OnClientClosed;
 59 // 收到服务器数据事件
 60 client.DataReceived += client_DataReceived;
 61 
 62 //每10s发送一次心跳或尝试一次重连
 63 timer = new System.Timers.Timer(HeartbeatTime);
 64 timer.Elapsed += new System.Timers.ElapsedEventHandler((s, x) =>
 65 {
 66 //心跳包
 67 if (client.IsConnected)
 68 {
 69 var heartMsg = System.Text.Encoding.Default.GetBytes("echo heart \r\n");
 70 client.Send(heartMsg, 0, heartMsg.Length);
 71 }
 72 //断线重连
 73 else if (!client.IsConnected)
 74 {
 75 client.Connect(new IPEndPoint(IPAddress.Parse(_Ip), _Port));
 76 }
 77 });
 78 timer.Enabled = true;
 79 timer.Start();
 80 
 81 }
 82 void OnClientConnected(object sender, EventArgs e)
 83 {
 84 Log.Info("已连接" + _Ip + _Port.ToString() + '\n');
 85 }
 86 void OnClientClosed(object sender, EventArgs e)
 87 {
 88 Log.Info("已断开" + _Ip + _Port.ToString() + '\n');
 89 }
 90 void OnClientError(object sender, SuperSocket.ClientEngine.ErrorEventArgs e)
 91 {
 92 Log.Error($"错误:{e.Exception.Message}" + '\n');
 93 }
 94 void client_DataReceived(object sender, DataEventArgs e)
 95 {
 96 string msg = Encoding.UTF8.GetString(e.Data);
 97 Log.Info(msg.Trim('\0'));
 98 }
 99 }
100 }

 

 

//调用

Task.Run(() =>
{
MonitorClientCommCore mcc = new MonitorClientCommCore(Ip, port, "发送 我爱黎明!", 10);//ip,端口
mcc.Start();
});

标签:Socket,C#,Ip,System,HeartbeatTime,client,using,重连,Port
From: https://www.cnblogs.com/chibangze/p/17763760.html

相关文章

  • 2023年CSPM-3国标项目管理中级认证含金量及报名指南
    CSPM-3中级项目管理专业人员评价,是中国标准化协会(全国项目管理标准化技术委员会秘书处),面向社会开展项目管理专业人员能力的等级证书。旨在构建多层次从业人员培养培训体系,建立健全人才职业能力评价和激励机制的要求,培养我国项目管理领域复合型人才。  【证书含金量】 ·竞聘优先......
  • 2023年10月DAMA-CDGP数据治理专家认证报名来这
    DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业竞争能力。DAMA是数据管理方面的认证,帮助数据从业者提升......
  • 2023年惠州/深圳CPDA数据分析师认证含金量及报名流程
    CPDA数据分析师认证是大数据方面的认证,助力数据分析人员打下扎实的数据分析基础知识功底,为入门数据分析保驾护航。帮助数据分析人员掌握系统化的数据分析思维和方法论,提升工作效率和决策能力,遇到问题能够举一反三,为大部分决策难题提供解决方案。帮助数据分析人员掌握几种通用的数据......
  • 升级Lync Server 2013到Skype for Business 2019(十三)
    写在前面SkypeforBusiness2019可以与CiscoVCS进行集成,以提供大型视频会议功能。本章将介绍如何为新的SkypeforBusiness2019池新建受信任的应用,并配置集成。切换CiscoVCS服务器备份服务器数据。运行如下PowerShell命令,移除LyncServer2013上的旧TrustedApplicationPool。......
  • 【Java 并发编程】LockSupport
    目录简介方法介绍阻塞和唤醒示例示例1示例2示例3阻塞对象blocker的作用和显式锁、隐式锁等待唤醒的区别简介java.util.concurrent.locks.LockSupport是一个工具类,提供了基本的线程阻塞和唤醒功能,它是创建锁和其他同步组件的基础工具,内部是基于sun.misc.Unsafe类实现的。Lo......
  • C语言-数据类型
    C语音-数据类型数据类型中文名称空间大小(bite-字节)char字符串数据类1short(int)短整型2int整形4long长整形4longlong更长的整形8float单精度浮点数4double双精度浮点数8include<>intmain(){ //字符类型charch......
  • centos8使用df命令查看磁盘占用,数据刷新不及时
    磁盘要用完了,在清理数据。清理过程中,用df查看磁盘占用情况。发现df的结果有延迟。大概几分钟,10分钟以内。 [root@10-100-0-18~]#dfFilesystem1K-blocksUsedAvailableUse%Mountedondevtmpfs8073048080730480%/devtmpfs......
  • 计讯物联发布轻量级5G RedCap工业智能网关,领航5G应用轻装上阵
    根据工信部数据显示,我国目前已经建成了超过234万个5G基站,年均建设数量近70万。5G典型应用场景融入了国民经济40个大类,涵盖了文体娱乐、赛事直播、居住服务等消费领域以及矿山、医疗、港口、工业制造、车联网等垂直行业。总而言之,5G在实体经济数字化、网络化、智能化转型升级进程中......
  • 《Deep Residual Learning for Image Recognition》阅读笔记
    论文标题《DeepResidualLearningforImageRecognition》撑起CV界半边天的论文Residual:主要思想,残差。作者何恺明,超级大佬。微软亚研院属实是人才辈出的地方。初读摘要提问题:更深层次的神经网络更难训练。提方案:提出了残差网络解决深层网络训练的问题。这也......
  • Linux 本地部署私有Stackedit Markdown编辑器远程访问
    StackEdit是一个受欢迎的Markdown编辑器,在GitHub上拥有20.7kStar!,它支持将Markdown笔记保存到多个仓库,包括Gitee、GitHub和Gitea。此在线笔记工具还提供了一些便捷功能,如拖拽或粘贴上传图片、文件搜索功能,以及可切换为炫酷的暗黑主题,这些功能特别适合那些喜欢使用Markdown来记录......