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


组件安装
Package命令行安装:
Install-Package BaseConnect -Version 1.0.0
可视化包管理工具:
Nuget搜索BaseConnect

组件使用
小提示
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工具模拟通信

源代码
已将源代码编译发布至Nuget包管理平台,可直接在项目中安装使用,如需进行定制化修改,可联系本人获取完整源代码。
如有不懂或更好的方式请在留言区留下评论!!
还在手撸TCP/UDP/COM通信?一个仅16K的库搞定!的更多相关文章
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.1
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.2
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.0.1
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- TCP/UDP简易通信
TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端).UDP客户端 目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的 ...
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.3
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- 【转】TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
[转]TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端).UDP客户端 目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP ...
- 一个共通的viewModel搞定所有的编辑页面-经典ERP录入页面(easyui + knockoutjs + mvc4.0)
http://www.cnblogs.com/xqin/archive/2013/06/06/3120887.html 前言 我写代码喜欢提取一些共通的东西出来,之前的一篇博客中说了如何用一个共通的v ...
- 一个共通的viewModel搞定所有的分页查询一览及数据导出(easyui + knockoutjs + mvc4.0)
前言 大家看标题就明白了我想写什么了,在做企业信息化系统中可能大家写的最多的一种页面就是查询页面了.其实每个查询页面,除了条件不太一样,数据不太一样,其它的其实都差不多.所以我就想提取一些共通的东西出 ...
- TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的使用 框架源码结构 补充说明 源码地址 说明 之前有好几篇博客在讲TCP/UDP通信方 ...
- [Java] Tcp/udp 简单通信
本文转自 我自己的博客guozeyiblog.cn 欢迎来訪 效果图: //UDP通信 import java.awt.*; import java.awt.event.ActionEvent; i ...
随机推荐
- Linux_tail总结
tail 命令用法 功能从尾部显示文件若干行 语法: tail [ +/- num ][参数] 文件名 使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把 ...
- linux使用iptables屏蔽ip地址
一.iptables命令介绍: netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,在安装系统的时 ...
- KVM命令参数
# virt-install --help usage: virt-install --name NAME --memory MB STORAGE INSTALL [options] 从指定安装源创建 ...
- 「Chroot环境」Debian Testing amd64 on arm64
这个是适用于ARM64环境的AMD64 Debian Testing系统.基于FEX转译.这个系统运行在ARM64的手机和电脑上,运行的软件是AMD64(X64)格式.下载链接提供桌面版和基础版.适用 ...
- Java程序设计(三)作业
题目1:用户输入学号,如果是以ccutsoft开头,并且后边是4位数字,前两位大于06小于等于当前年份.判断用户输入是否合法.ccutsoft_0801. 1 //题目1:用户输入学号,如果是以abc ...
- P5657 [CSP-S2019] 格雷码 (找规律)
观察几个数据,有一种思路:类似于二分,判断每一位应该填1还是0: 1 #include <bits/stdc++.h> 2 //#define loveGsy 3 using namesp ...
- springboot的注解声明过滤器配置错误导致拦截所有请求。
究其原因, 原来spring 扫包时候 扫了Webfilter 注解,注册了一次过滤匹配路径,扫了Component注解(又注册了一次过滤匹配路径,默认是全路径). Component注解后于WebF ...
- 2022-08-21-Freewind主题_cdn替换版
layout: post cid: 16 title: Freewind主题 cdn替换版 slug: 16 date: 2022/08/21 14:06:00 updated: 2022/08/21 ...
- C语言经典编程100题
程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1 ...
- 浅尝 ECDHE 协议流程
前言 ECDHE 我之前是听都没听过, 但是新业务需要对前后端通信进行加密, 经过大佬推荐才知道有这个东西, 经过几天的学习和踩坑, 才大致明白其流程和使用方式. 过程坎坷, 好在最后还是成功运用到了 ...