# TouchSocket
**Repository Path**: RRQM_Home/TouchSocket
## Basic Information
- **Project Name**: TouchSocket
- **Description**: TouchSocket是.Net(包括 C# 、VB.Net、F#)的一个整合性的网络通信框架。包含了socket、 tcp、udp、ssl、namedPipe、http、websocket、rpc、jsonrpc、webapi、xmlrpc、modbus等一系列的通信模块。一键式解决 tcp 黏分包问题,可快速实现数据报文解析。
【此处仅作同步源,pr请到github)】
- **Primary Language**: C#
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://touchsocket.net/
- **GVP Project**: Yes
## Statistics
- **Stars**: 2799
- **Forks**: 842
- **Created**: 2021-03-02
- **Last Updated**: 2025-12-10
## Categories & Tags
**Categories**: web-dev-toolkits
**Tags**: TCP, udp, Http, WebSocket, Socket
## README
**中** | [En](./README.md)
[](https://www.nuget.org/packages/TouchSocket/)
[](https://www.nuget.org/packages/TouchSocket/)
[](https://www.apache.org/licenses/LICENSE-2.0.html)
[](https://gitee.com/RRQM_Home/TouchSocket/stargazers)
[](https://gitcode.com/RRQM_Home/TouchSocket)
[](https://gitee.com/RRQM_Home/TouchSocket/members)
[](https://github.com/RRQM/TouchSocket)
纸上得来终觉浅,绝知此事要躬行。
---
# 🎀 描述

**TouchSocket 是一个简洁、现代且高性能的 .NET 网络通信框架**,支持 C#、VB.NET、F# 等语言。
你可以用它快速构建 **TCP / UDP / MQTT / WebSocket / SSL / HTTP / Modbus / RPC** 等各种网络应用。
框架提供高吞吐的 IOCP/Socket 实现、完善的内存池、灵活的数据适配器体系,并为多种场景准备了丰富的扩展插件(心跳、重连、SSL、RPC 等)。
---
# 🌟 文档导航
* [文档首页](https://touchsocket.net/)
* [快速入门](https://touchsocket.net/docs/current/startguide)
* [API 文档](https://touchsocket.net/api/)
---
# 🖥 支持环境
* .NET Framework ≥ **4.6.2**
* .NET Standard ≥ **2.0**
* .NET ≥ **6.0**
# 🥪 支持框架
Console / WinForm / WPF / MAUI / Avalonia / Blazor / Xamarin / Unity(非 WebGL) / Mono / 其他所有 C# 生态
---
# 🌴 TouchSocket 特点速览
### 🚀 1. 真正高性能的 IOCP 实现
TouchSocket 在 IOCP 设计上进行了深度优化,与传统示例代码不同:
| 实现方式 | 内存处理方式 | 性能影响 |
| -------------------- | ---------------------------- | ---------------------- |
| **传统 IOCP(官方示例)** | 接收区固定,收到数据后需要 **复制** 出来再处理 | 多一次复制 → 高并发场景拖慢速度 |
| **TouchSocket IOCP** | 每次接收前从 **内存池** 获取可写块,并直接用于接收 | **零额外复制** → 大流量下显著提升性能 |
实测在连续传输 **10 万次、每次 64KB** 数据的场景中,性能可达到传统实现的 **约 10 倍**。
---
### 🔧 2. 适配器体系(数据处理的“插件化中枢”)
TouchSocket 最关键的模块之一——**数据处理适配器**,相比其他框架更灵活:
* 可解析 **协议头/协议体**
* 可自动处理 **粘包 / 分包**
* 可直接转换 **数据对象**
* 可随时替换适配器并立即生效
* 内置多种协议模板:固定包头、固定长度、终止字符、HTTP、WebSocket …
只需配置适配器即可让复杂协议瞬间变得可控。
---
### 🧩 3. 可插拔的框架扩展体系
TouchSocket 的 **插件系统(Plugins)** 允许在整个通信生命周期中注入行为,如:
* 自动重连
* 心跳检测
* 日志
* SSL 认证
* 自定义鉴权
* Pipeline 数据过滤
通过配置 `.ConfigurePlugins()` 即可轻松挂载。
---
### 🛠 4. 完整的 TCP/UDP 抽象与强兼容性
TCP/UDP 的使用方式与原生 Socket 一致,但 TouchSocket 提供更健壮的:
* 异常处理
* 高并发底层能力
* 安全的连接管理
* 标准化事件模型(Connected/Received/Closed 等)
你可以无缝迁移现有 Socket 逻辑。
---
### 📦 5. 统一的客户端/服务端模型
无论 TCP、UDP、WebSocket,TouchSocket 的 API 都尽量保持一致,让开发体验更加通用:
```csharp
client.SendAsync(...)
client.Received += ...
client.ConnectAsync(...)
```
学习成本极低。
---
### 🧠 6. 强大的内存池与 Span/Memory 优化
整个框架深度使用:
* **ByteBlock(高效可复用的内存块)**
* **内存池 MemoryPool**
* **Span / ReadOnlySpan**
确保在高流量下保持低 GC 血压。
---
# ✨ 简单示例
> 以下仅展示最基础的入门代码,更多示例请查看文档。
## TcpService
```csharp
TcpService service = new TcpService();
service.Connected = (client, e) => EasyTask.CompletedTask;
service.Closed = (client, e) => EasyTask.CompletedTask;
service.Received = (client, e) =>
{
string str = e.Memory.Span.ToString(Encoding.UTF8);
Console.WriteLine($"收到:{str}");
return EasyTask.CompletedTask;
};
await service.StartAsync(7789);
```
## TcpClient
```csharp
TcpClient client = new TcpClient();
client.Connected = (c, e) => EasyTask.CompletedTask;
client.Closed = (c, e) => EasyTask.CompletedTask;
client.Received = (c, e) =>
{
Console.WriteLine(e.Memory.Span.ToString());
return EasyTask.CompletedTask;
};
await client.ConnectAsync("127.0.0.1:7789");
await client.SendAsync("Hello");
```
## TcpClient 断线重连
```csharp
.ConfigurePlugins(a =>
{
a.UseReconnection();
});
```
---
# 🧩 固定包头模式(FixedHeaderPackageAdapter)
适用于处理粘包/分包。
支持:
* **Byte = 1 + n**(≤255B)
* **Ushort = 2 + n**(≤65535B)
* **Int = 4 + n**(≤2GB)
端序由 TouchSocketBitConverter 控制:
```csharp
TouchSocketBitConverter.DefaultEndianType = EndianType.Little;
```
---
# 🧱 自定义适配器
## CustomFixedHeaderDataHandlingAdapter
适用于固定包头结构,例如:
```
| 1 | 1 | 1 | ********** |
```
## CustomUnfixedHeaderDataHandlingAdapter
适用于不固定头结构,如 HTTP:
* 头以 `\r\n\r\n` 分隔
* Content-Length 决定数据体长度
可用少量代码完成解析。
---
# 👑 功能导图
---
# 🔗 联系作者
* [CSDN 博客](https://blog.csdn.net/qq_40374647)
* [B 站视频](https://space.bilibili.com/94253567)
* [源代码仓库](https://gitee.com/RRQM_Home)
* QQ 群:234762506
---
# 🙏 致谢
感谢大家对 TouchSocket 的支持。
如有问题,欢迎 Issue 或加入 QQ 群交流。
特别感谢以下开发工具:
* Visual Studio
* JetBrains
* VS Code
---
# ❤️ 支持作者
* [打赏支持](https://touchsocket.net/docs/current/donate)
* [Pro 版本支持](https://touchsocket.net/docs/current/enterprise)
---
# 📢 特别声明
TouchSocket 已加入 **dotNET China** 组织。