c# 全网最稳定 企业级 以太网客户端类库 具备即时更新状态,断线三次重拨,稳定收发。

源码下载,带示例

代码实现了一个基本的TCP客户端,能够连接到服务器并发送接收数据。当连接失败时,会进行重连,并在达到最大重连次数后终止连接。使用异步编程模型、实现事件模型以及重连机制。

  1. ConnectAsync(): 这是一个异步方法,用于与服务器建立连接。在方法中,首先初始化连接失败计数_failedConnectionCount为0,并创建一个新的TcpClient对象。然后进入一个无限循环,直到成功连接或达到最大重试次数。在循环中,使用ConnectAsync方法与服务器进行异步连接,并在指定的连接超时时间内等待连接完成。如果连接超时,则抛出TimeoutException异常。连接成功后,获取连接的网络流NetworkStream对象,并触发登录事件。接着调用BeginListenAsync方法开始异步监听服务器发来的数据。如果连接过程中出现任何异常,则触发登录事件,增加失败连接计数,并在失败连接计数达到3次时终止连接。最后,根据指数退避时间进行等待后再次尝试连接。

  2. SendData(string data): 这是一个用于向服务器发送数据的方法。在方法中,通过使用ASCII编码将字符串转换为字节数组,然后将字节数组写入网络流_stream中发送给服务器。此方法会尝试发送数据最多3次,如果发送过程中出现异常,则会继续尝试发送。

  3. DataReceivedEventLoginEvent:这两个事件分别用于处理数据接收和登录事件。通过订阅这些事件,调用者可以在数据接收和登录时执行相应的操作。

  4. RecData属性:这个属性用于获取并清空接收到的数据_recData。在获取之前,将接收到的数据保存到临时变量tmp中,并将接收缓冲区_recData清空。

  5. Ip和Port属性:这两个属性分别用于设置和获取服务器的IP地址和端口号。

  6. IsConnected属性:这个只读属性用于检查客户端是否已连接到服务器。通过判断_client是否为空、连接是否成功且无数据可读来确定客户端的连接状态。

using System;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace CL_Server
{public class CL_TCPClient{public event Action<DataReceivedEventArgs> DataReceivedEvent;public event Action<DataReceivedEventArgs> LoginEvent;private TcpClient _client;private NetworkStream _stream;private string _ip;private int _port;readonly private int _terminalNum;readonly private int _connectTimeout;private string _recData = String.Empty;public string RecData{get{string tmp = _recData;_recData = String.Empty;return tmp;}}public string Ip{get{return _ip;}set{_ip = value;}}public int Port{get{return _port;}set{_port = value;}}public bool IsConnected => _client?.Connected == true && !_client.Client.Poll(1, SelectMode.SelectRead) && _client.Client.Available == 0;public int TerminalNum => _terminalNum;private int _failedConnectionCount;public CL_TCPClient(string ipAddress, int port, int terminalNum, Action<DataReceivedEventArgs> dataReceived, int connectTimeout = 3000, Action<DataReceivedEventArgs> onlogin=null){DataReceivedEvent += dataReceived;LoginEvent = onlogin;_ip = ipAddress;_port = port;_terminalNum = terminalNum;_connectTimeout = connectTimeout;try{ConnectAsync().ConfigureAwait(false);}catch (Exception){return; }}public async Task ConnectAsync(){_failedConnectionCount = 0;_client = new TcpClient();while (true){try{using (var cts = new CancellationTokenSource()){cts.CancelAfter(_connectTimeout)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/31309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARM架构银河麒麟docker,源码编译安装GDAL

docker中安装依赖 sudo apt-get update sudo apt-get install build-essential autoconf automake libtool sudo apt-get install libproj-dev libgeos-dev libjson-c-dev libpng-dev libjpeg-dev sudo apt-get install python3-dev sudo apt-get install python3.11-dev去官网…

IO密集时epoll还高效吗?

io特别密集时为什么 epoll 效率不高。原因是&#xff1a; 连接密集&#xff08;短连接特别多&#xff09;&#xff0c;使用epoll的话&#xff0c;每一次连接需要发生epoll_wait->accpet->epoll_ctl调用&#xff0c;而使用select只需要select->accpet&#xff0c;减少了…

数组和字符串-字符串

最长公共前缀 题意&#xff1a; 给多个字符串&#xff0c;找最长前缀 解&#xff1a; 暴力匹配&#xff0c;先按字典序排序字符串&#xff0c;这样长度短的优先进行匹配&#xff0c;所得字符串就可能偏小 适合a aa aaa aaaa这样的数据&#xff0c;不过对于aa aab aabc aab…

python爬虫相关

目录 初识爬虫 爬虫分类 网络爬虫原理 爬虫基本工作流程 搜索引擎获取新网站的url robots.txt HTHP协议 Resquests模块 前言&#xff1a; 安装 普通请求 会话请求 response的常用方法 简单案例 aiohttp模块 使用前安装模块 具体案例 数据解析 re解析 bs4…

数据治理内容

https://space.bilibili.com/405479587 文章内容来源b站up主&#xff0c;语兴呀 数据治理内容 一.模型&#xff1a; 由于早期业务快速扩张&#xff0c;对元数据把控不到位&#xff0c;导致成熟期出现大量不合规模型 解决&#xff1a;数据标准&#xff1a;元数据补充 建设管控&…

基于长短期神经网络LSTM时间序列回归分析

​目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的回归分析 MATALB代码:基于长短期神经网络的回归分析,基于LSTM的回归预测资源-CSDN文库 https://download.csdn.net/download/abc991835105/88184633 效果图 结果分析 展望 参考论文 背影 LSTM神经…

AutoDL服务器的镜像版本太高,配置python3.7 tensorflow1.15版本的框架的步骤

1.选择一个实例&#xff0c;进入后端界面 2. 更新bashrc中的环境变量 conda init bash && source /root/.bashrc查看虚拟环境 conda info --envs可以看到此时有一个base的虚拟环境 但是它的python版本为3.8.10&#xff0c;无法安装tensorflow1.15,所以我们要创建一个…

PHP面向对象面试题

1、简述面对对象六大设计原则 &#xff1f; 面向对象六大设计原则是一组指导软件设计的原则&#xff0c;它们有助于提高代码的可维护性、可扩展性和可重用性。这些原则是&#xff1a; 单一职责原则&#xff08;Single Responsibility Principle&#xff0c;SRP&#xff09;&a…

Ctfshow web入门 SSTI 模板注入篇 web361-web372 详细题解 全

CTFshow SSTI web361 笔记分享 一、代码块 变量块 {{}} 用于将表达式打印到模板输出 注释块 {##} 注释 控制块 {%%} 可以声明变量&#xff0c;也可以执行语句 {% for i in .__class__.__mro__[1].__subclasses__() %}{% if i.__name___wrap_close %}{% print i.__init__.…

Nacos服务治理—负载均衡

引入负载均衡 在消费方引入负载均衡机制&#xff0c;同时简化获取服务提供者信息的流程 Spring Cloud引入组件LoadBalance实现负载均衡 添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web<…

高等数学:圆周率的计算方法

文章目录 1 割圆术2 无穷级数2.1 拉马努金(Ramanujan)圆周率公式2.2 Chudnovsky圆周率公式2.3 BBP公式2.4 其他级数(1) 自然数倒数偶次方和(2) 泰勒展开(3) 无穷乘积 3 微积分4 概率学(Monte Carlo)5 连分数6 总结 本文将对圆周率 π \color{red}{\pi} π的计算方法作简单整理&…

js 正则表达式

js 正则表达式 http://tool.oschina.net/regex https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions 11 22 333

学习pytorch 3 tensorboard的使用

tensorboard的使用 1. 安装2. add_scalar 查看函数图形3. 查看结果4. add_image() 查看训练步骤中间结果的图片 1. 安装 pytorch conda环境 pip install tensorboard pip install opencv-python2. add_scalar 查看函数图形 常用来查看 train val loss等函数图形 from torch…

解决:Unexpected ‘debugger‘ statement.eslint(no-debugger) (即:页面中的 debugger 标红)的问题

1、问题描述&#xff1a; 其一、报错为&#xff1a; Unexpected debugger statement.eslint(no-debugger) 中文为&#xff1a; 意外的“调试器”语句.eslint&#xff08;无调试器&#xff09; 其二、问题描述为&#xff1a; 在正常的 vue 项目中使用 debugger 的调试过程…

Android上的基于协程的存储框架

在Android上&#xff0c;经常会需要持久化本地数据&#xff0c;比如我们需要缓存用户的配置信息、用户的数据、缓存数据、离线缓存数据等等。我们通常使用的工具为SharePreference、MMKV、DataStore、Room、文件等等。通过使用现有的存储框架&#xff0c;结合协程&#xff0c;我…

十分钟python入门 正则表达式

正则常见的三种功能&#xff0c;它们分别是&#xff1a;校验数据的有效性、查找符合要求的文本以及对文本进行切割和替换等操作。 1.元字符 所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符 元字符大致分成这几类&#xff1a;表示单个特殊字符的&#xff0c;表示…

hbuiderx 连接mumu12

原文地址&#xff1a;HbuilderX 如何使用MUMU模拟器调试--详细配 HbuilderX 如何使用MUMU模拟器调试--详细配置&#xff01;_hbuilderx mumu_一只大黑洋的博客-CSDN博客

Python-OpenCV中的图像处理-图像平滑

Python-OpenCV中的图像处理-图像平滑 图像平滑平均滤波高斯模糊中值模糊双边滤波 图像平滑 使用低通滤波器可以达到图像模糊的目的。这对与去除噪音很有帮助。其实就是去除图像中的高频成分&#xff08;比如&#xff1a;噪音&#xff0c;边界&#xff09;。所以边界也会被模糊…

K8s实战入门(三)

文章目录 3. 实战入门3.1 Namespace3.1.1 测试两个不同的名称空间之间的 Pod 是否连通性 3.2 Pod3.3 Label3.4 Deployment3.5 Service 3. 实战入门 本章节将介绍如何在kubernetes集群中部署一个nginx服务&#xff0c;并且能够对其进行访问。 3.1 Namespace Namespace是kuber…

ROS入门-第 1 章 ROS概述与环境搭建

目录 第 1 章 ROS概述与环境搭建 1.1 ROS简介 1.1.1 ROS概念 1.1.2 ROS设计目标 1.1.3 ROS发展历程 1.3 ROS快速体验 1.3.1 HelloWorld实现简介 1.3.2 HelloWorld&#xff08;C版&#xff09; 步骤 1&#xff1a;创建工作空间 步骤 2&#xff1a;创建发布者节点 步骤…