一个兼容多协议的通讯库
$ dotnet add package CTea.SocketLibrarySocketLibrary 是一个基于 .NET 的轻量级通信组件,为 串口 (SerialPort)、TCP、UDP 以及裸 Socket 等多种传输介质提供统一、易用的读写接口。它将报文封装、CRC 校验、同步 / 异步调用等细节屏蔽在内部,开发者仅需关注业务逻辑即可。
当前仓库同时包含四套协议族的实现:
CSocket、ESocket、NSocket、USocket,使用方式保持高度一致,只需替换命名空间即可。
SocketLibrary.Interfaces 统一约束行为,调用方与实现方解耦。源码引用(推荐)
git clone https://github.com/your-org/SocketLibrary.git
在解决方案中直接引用 SocketLibrary.csproj。
NuGet(TODO) 未来将发布至 NuGet,敬请关注。
以下示例以
CSocket为例,其余协议族更换命名空间即可:ESocket.Device.SocketFactory、NSocket.Device.SocketFactory、USocket.Device.SocketFactory。
using CSocket.Device;
using System.Net.Sockets;
var client = new TcpClient();
await client.ConnectAsync("192.168.1.10", 502);
var factory = new SocketFactory();
var master = factory.CreateMaster(client);
// ----- 读操作 -----
ushort[] requestData = [ /* 填写请求数据 */ ];
int result = master.Read(0x01, // 设备地址
0x10, // 功能码 / 命令码
requestData, // 请求数据
out ushort[] respondData);
// ----- 写操作 -----
master.Write(0x01, 0x10, new ushort[] { 0x1234, 0xABCD });
using CSocket.Device;
using System.IO.Ports;
var serialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
serialPort.Open();
var factory = new SocketFactory();
var master = factory.CreateMaster(serialPort);
// 异步写入
await master.WriteAsync(0x01, 0x10, new byte[] { 0x01, 0x02, 0x03 });
更多 API 详情请查阅源代码中 *Master、*Transport、*Message 等类。
SocketLibrary/
├─ CSocket/ # C 协议族实现 (Device / IO / Message / Extensions)
├─ ESocket/ # E 协议族实现
├─ NSocket/ # N 协议族实现
├─ USocket/ # U 协议族实现
├─ Interfaces/ # 公共接口定义
├─ Extensions/ # 通用扩展方法,如 CRC、日志
├─ Utility/ # 工具类
└─ Libraries/ # 面向业务的聚合封装
ISocketFactory 创建 ISocketMaster 与 ISocketTransport,在保持统一 API 的同时屏蔽具体实现。TcpClientAdapter、UdpClientAdapter、SerialPortAdapter 将不同物理通道抽象为统一的 IStreamResource。SocketIpTransport、SocketSerialTransport 等对上层负责报文拆装,对下层负责流控制。dotnet test 通过并遵循 Conventional Commits 规范。Distributed under the MIT License. See LICENSE for more information.