• 还在手撸TCP/UDP/COM通信?一个仅16K的库搞定!


    摘要#

    在一些项目中,可能会用到串口(COM)通信,也可能会使用TCP-Server,TCP-Client,UDP等等,这种实现起来都大差不差,所以我封装了一个无任何依赖小而美的通信框架,通用性强,安全稳定,动态库仅16KB。目前支持UPD/COM/TCP-Server/TCP-Client,UDP支持收发分离,连接状态回调等等。

    image-20221119225500620image-20221119232550625

    组件安装#

    Package命令行安装:

    Install-Package BaseConnect -Version 1.0.0
    

    可视化包管理工具:

    Nuget搜索BaseConnect

    image-20221119225754428

    组件使用#

    小提示#

    Tips:因都继承自BaseConnect这个基类,所以无论我们需要创建哪种通信,都可以使用BaseConnect作为声明类型。

    使用该类库创建一个通信仅有4步:new出一个对象(如TcpClient)传入构造参数--->注册数据接收回调--->注册连接状态变更回调--->打开连接

    下面以Tcp-Client为例,简单说明一下使用方式

    使用#

    1、为实例创建一个声明

    private BaseConnect _connect = new NullConnect();
    

    2、创建TcpClient实例,注册数据接收、连接状态回调事件,打开连接

    //创建Tcp-Client
    _connect = new TcpClientConnect(serverIp,serverPort);
    _connect.ReceivedBytes += OnReceivedBytes;
    _connect.ConnectStatusChanged += OnConnectStatusChanged;
    _connect.OpenConnect();
    
    //数据回调事件
    private void OnReceivedBytes(string sender, byte[] data)
    {
          //数据处理...
    }
    
    private void OnConnectStatusChanged(bool connected)
    {
         //True:连接  False:断开
    }
    

    3、关闭连接,注销回调事件

    if (_connect != null)
    {
           _connect.CloseConnect();
           _connect.ReceivedBytes -= OnReceivedBytes;
           _connect.ConnectStatusChanged -= OnConnectStatusChanged;
    }
    

    搞定!就只需这么几步就能实现,COM以及UDP等等同理。唯一有变化的就是不同的通信在创建实例时传入的构造参数不一样。

    实例构造参数说明#

    COM
    参数 类型 是否必填 举例
    comPortName(串口号) string 必填 COM1
    comBaudRate(波特率) int 必填 115200
    comParity(校验位) Parity 选填(默认为Parity.None) Parity.Odd
    UDP
    参数 类型 是否必填 举例
    remoteIp(远端IP) string 必填 127.0.0.1
    remotePort(远端端口) int 必填 9000
    localPort(本机端口) int 选填(默认为0) 9005
    TCP-Client
    参数 类型 是否必填 举例
    remoteIp(远端IP) string 必填 127.0.0.1
    remotePort(远端端口) int 必填 9000
    localPort(本机端口) int 选填(默认为0) 9005
    TCP-Server
    参数 类型 是否必填 举例
    localPort(本机端口) int 必填 8888

    效果演示#

    以下为使用该库所实现的通信模块,右侧为NetAssist工具模拟通信

    1

    如有不懂或更好的方式请在留言区留下评论!!

  • 相关阅读:
    解决模态框不显示的问题
    力扣大厂热门面试算法题 12-14
    【计算机网络实验】单区域OSPF配置实验
    Java并发面试题:(八)AQS原理和Semaphore、CountdownLatch、CyclicBarrier类
    JS原型之属性设置和屏蔽,你能想到吗?
    IoC含义介绍(Spring的核心思想)
    V神个人调查报告:哪位圈内名人最受V神尊重?中国受V神喜欢吗?
    【ChatGPT】【Gemini】-用Python调用google的Gemini API
    Elasticsearch实战(六)---高级搜索 boost控制权重实现搜索结果排名
    3D封装技术发展
  • 原文地址:https://www.cnblogs.com/chonglu/p/16907536.html