En | 中文
纸上得来终觉浅,绝知此事要躬行。
🎀 Description
TouchSocket is a simple, modern, and high-performance .NET networking framework, supporting C#, VB.NET, F#, and more. It helps you build powerful communication applications such as TCP / UDP / MQTT / WebSocket / SSL / HTTP / Modbus / RPC with ease.
The framework features a highly optimized IOCP/Socket implementation, robust memory pooling, a flexible data-adapter pipeline, and a rich plugin ecosystem including heartbeat, reconnection, SSL, RPC, and more.
🌟 Documentation
🖥 Supported Platforms
- .NET Framework ≥ 4.6.2
- .NET Standard ≥ 2.0
- .NET ≥ 6.0
🥪 Supported Application Types
Console / WinForm / WPF / MAUI / Avalonia / Blazor / Xamarin / Unity (non-WebGL) / Mono / All C#-based platforms
🌴 TouchSocket at a Glance (Updated & Revised)
🚀 1. A Truly High-Performance IOCP Implementation
TouchSocket provides a deeply optimized IOCP design.
| Implementation | Memory Handling | Performance Impact |
|---|---|---|
| Traditional IOCP (Microsoft sample) | Uses a fixed shared buffer; received data must be copied to another buffer | Extra copy → High overhead under load |
| TouchSocket IOCP | Allocates a fresh memory block from the memory pool for each receive | Zero extra copy → Significant performance gain |
In stress tests (100k messages × 64KB), TouchSocket achieved up to 10× faster throughput compared to the traditional model.
🔧 2. Data Adapter System — The Heart of the Framework
The data-adapter pipeline is one of TouchSocket’s core strengths:
- Parses headers and payloads
- Handles sticky packets & fragmentation
- Converts directly to data objects
- Hot-swappable adapters
- Built-in templates: fixed header, fixed length, terminator, HTTP, WebSocket, etc.
Adapters make protocol development clean, modular, and highly reusable.
🧩 3. Pluggable Extension System
TouchSocket’s Plugins system allows extending communication behavior across the entire lifecycle:
- Auto reconnection
- Heartbeat detection
- SSL validation
- Logging
- Authentication
- Custom data pipelines
All via:
.ConfigurePlugins(a => { ... });
🛠 4. Robust TCP/UDP Abstraction
TouchSocket maintains full compatibility with native Socket semantics while improving:
- Stability
- Concurrency and throughput
- Connection lifecycle management
- Exception handling
- Unified event model (Connected / Received / Closed)
You can migrate existing Socket code with minimal changes.
📦 5. Unified Client/Server API
Across TCP, UDP, WebSocket, and others, TouchSocket exposes a consistent set of APIs:
client.ConnectAsync(...)
client.SendAsync(...)
client.Received += ...
This ensures a low learning curve and fast development.
🧠 6. High-Efficiency Memory Pool & Span-Based Processing
The framework is optimized with:
- ByteBlock reusable high-performance buffers
- MemoryPool
- Span / Memory
Ensuring minimal allocations and low GC pressure during heavy workloads.
✨ Basic Examples
The following examples show only the simplest usage. Refer to the documentation for more advanced scenarios.
TcpService
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($"Received: {str}");
return EasyTask.CompletedTask;
};
await service.StartAsync(7789);
TcpClient
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 Auto-Reconnection
.ConfigurePlugins(a =>
{
a.UseReconnection<TcpClient>();
});
🧩 Fixed-Header Package Mode
Solves packet fragmentation & merging issues.
Supports:
- Byte = 1 + n (≤255B)
- Ushort = 2 + n (≤65535B)
- Int = 4 + n (≤2GB)
Endianness is configurable:
TouchSocketBitConverter.DefaultEndianType = EndianType.Little;
🧱 Custom Adapters
CustomFixedHeaderDataHandlingAdapter
For fixed-header formats such as:
| 1 | 1 | 1 | ********** |
CustomUnfixedHeaderDataHandlingAdapter
For variable-header protocols such as HTTP:
- Header ends with
\r\n\r\n - Body length from
Content-Length
A small amount of code can build a complete parser.
👑 Feature Overview Diagram
🔗 Contact
- CSDN Blog
- Bilibili Videos
- Source Repositories
- QQ Group: 234762506
🙏 Acknowledgements
Thank you all for supporting TouchSocket. If you have questions, feel free to submit an issue or join the QQ group.
Special thanks to:
- Visual Studio
- JetBrains
- Visual Studio Code
❤️ Support the Author
📢 Statement
TouchSocket is a member of the dotNET China organization.


