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

这篇具有很好参考价值的文章主要介绍了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是否为空、连接是否成功且无数据可读来确定客户端的连接状态。文章来源地址https://www.toymoban.com/news/detail-654163.html

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)

到了这里,关于c# 全网最稳定 企业级 以太网客户端类库 具备即时更新状态,断线三次重拨,稳定收发。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32的以太网外设+PHY(LAN8720)使用详解(6):以太网数据接收及发送

    1.1.1 检查是否接收到一帧完整报文 使用轮询的方式接收以太网数据是一种简单但是效率低下的方法,为了保证及时处理以太网数据我们需要在主循环内高频轮询是否接收到了以太网数据。轮询的函数为ETH_CheckFrameReceived,内容如下: 当以太网帧大于我们设置的DMA描述符buffer大

    2024年01月23日
    浏览(51)
  • 【车载以太网测试从入门到精通】——以太网TCP/IP协议自动化测试(含CAPL源码)

    【车载以太网测试从入门到精通】系列文章目录汇总 TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇

    2024年02月05日
    浏览(163)
  • 以太网协议学习笔记

    以太网接口电路主要由MAC(Media Access Control)控制器和物理层接口PHY两大部分构成。 PHY在发送数据时,接收MAC发过来的数据,把并行的数据转化为串行流数据,按照物理层的编码规则把数据编码转化为模拟信号发送出去,接收数据时的流程反之。 MAC和PHY芯片有一个配置接口,

    2024年02月14日
    浏览(47)
  • 以太网数据帧

    最近由于项目需求,需要开发UDP/TCP 协议栈,在此学习记录下以太网报的包格式,后续会把PMA/PCS,64B/66B,serdes 接口配置,时序设计等补充完整。 以太网链路传输的数据包称做 以太帧 ,或者以太网数据帧。在以太网中,网络访问层的软件必须把数据转换成能够通过网络适配

    2023年04月14日
    浏览(49)
  • 汽车以太网协议栈

    《大师说》栏目上线啦# 《大师说》栏目是怿星科技2023年推出的深度思考栏目,通过邀请内部专家,针对智能汽车行业发展、技术趋势等输出个性化的观点。每期一位大师,每位一个话题,本期由我们怿星的CTO虞胜伟,进行分享。👏👏 随着车载领域智能化,网联化的发展,

    2024年02月10日
    浏览(46)
  • 实验一 以太网组建

    实验 一    以太网组建 一、实验目的和要求 1、认识交换机和路由器的结构与连接方法 2、区分直通线和交叉 3、掌握简单的局域网配置方法以及组网方法 4、了解ip地址的组成 5、了解子网掩码、MAC、默认网关、数据链路地址的概念 6、了解配置路由器所使用的命令 相关知识

    2024年02月07日
    浏览(58)
  • 以太网知识

    / 【读书笔记】C3 The Ethernet System 以太网知识01 Media Independent Interface (MII) 媒体独立接口 CHAPTER 2 IEEE Ethernet Standards 以太网标准- 以太网的历史背景 基础知识——以太网(Ethernet ) 以太网数据帧格式(结构)图解 OSI七层参考模型及其协议和各层设备 一文带你读懂,这三个交换

    2024年02月05日
    浏览(60)
  • 以太网协议详解

      假设有这样一张网络拓扑图:   在拓扑图中有A、B、C三台计算机,并且它们三个是通过中间的 路由器 连接的。这时候计算机A要向计算机C发送一条数据,那么数据是怎么样到达计算机C呢?也就是说路由器是怎么知道A要发送数据给谁呢?   这就是接下来要讲的 以太

    2024年02月06日
    浏览(48)
  • 以太网接口总线类型笔记

    以太的接口技术有很多,按照其在标准模型中所在位置,可以简单地分成两种: MAC接口 :MAC接口用于连接PHY芯片或者和MAC直连,常用的有:MII、SMII、GMII、RGMII、SGMII、QSGMII、XGMII、XAUI、XLAUI等等。 MDI接口 :MDI接口是介质相关接口,常用于连接PHY芯片和外部介质,常用的有

    2024年02月07日
    浏览(51)
  • 车载以太网——DDS篇

    摘要: DDS为信息交换和应用程序集成创建了一个简单而强大的体系结构。 01、什么是DDS DDS是一系列标准,它指定了分布式应用程序可用于交换实时数据的API、协议和安全机制。应用程序所使用的软件应用程序编程接口(API)是基于一个安全的、服务质量(QoS)感知的“以数

    2024年01月18日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包