在 C# .NET 中,TCP 通信的相关类全部位于 System.Net.Sockets 命名空间下,微软按照使用难度、功能层级 做了分层封装:从极简易用的高层类 (适合90%日常开发),到灵活底层的基类 (自定义需求),再到高性能并发类(高吞吐服务)。
下面按推荐优先级分类讲解,附核心用途和选型建议:
一、首选:高层封装类(简单易用,新手/常规开发必用)
这是 .NET 为 TCP 通信封装的简化工具类,屏蔽了底层 Socket 复杂细节,开箱即用,是家用项目、客户端/服务端小工具的最优选择。
| 类名 | 角色 | 核心作用 |
|---|---|---|
TcpListener |
服务端专用 | 监听客户端的连接请求(绑定IP+端口,等待接入) |
TcpClient |
客户端专用 | 主动连接服务端,收发数据 |
NetworkStream |
通用 | 基于流模式读写 TCP 数据(配合 TcpClient 使用,最方便) |
✅ 适用场景:常规客户端/服务端、文件传输、消息通讯、家用NAS通讯、物联网小工具
二、底层基类:Socket 类(全能灵活,所有TCP通信的基础)
TcpListener/TcpClient 底层都是基于 Socket 实现的 。
这是最原始、功能最强大的网络类,支持 TCP/UDP,可完全自定义通信逻辑。
✅ 核心能力:
- 手动绑定、监听、连接、收发数据
- 自定义超时、缓冲区、套接字选项
- 兼容所有网络协议
❌ 缺点:代码繁琐,需要手动处理异常、粘包、连接断开
✅ 适用场景:需要高度自定义的网络框架、跨协议通信、底层组件开发
三、高性能类(高并发/高吞吐服务端专用)
适合游戏服务器、高并发网关、工业通讯等海量连接场景,.NET 专门优化的高性能 API:
| 类名 | 核心优势 |
|---|---|
SocketAsyncEventArgs |
基于IOCP(完成端口) 的异步模型,无线程开销,Windows/Linux 高性能首选 |
System.IO.Pipelines |
.NET Core 2.1+ 推出的现代高性能IO库,专门解决 TCP 粘包/分包问题,微软官方推荐 |
✅ 适用场景:高并发服务器、低延迟通讯、大数据量传输
四、快速选型(直接照抄)
- 新手/普通项目 →
TcpListener + TcpClient + NetworkStream(90% 场景) - 自定义通信逻辑 →
Socket - 高并发服务器 →
SocketAsyncEventArgs/Pipelines
五、极简代码示例(最常用的高层类)
1. TCP 服务端(TcpListener)
csharp
using System.Net;
using System.Net.Sockets;
using System.Text;
// 异步TCP服务端
async Task StartTcpServerAsync()
{
// 监听本机所有IP,端口8888
var listener = new TcpListener(IPAddress.Any, 8888);
listener.Start();
Console.WriteLine("服务端已启动,等待客户端连接...");
// 循环接受客户端连接
while (true)
{
// 等待客户端接入
TcpClient client = await listener.AcceptTcpClientAsync();
Console.WriteLine("客户端已连接");
// 独立处理客户端数据(异步不阻塞)
_ = HandleClientAsync(client);
}
}
// 处理客户端收发数据
async Task HandleClientAsync(TcpClient client)
{
using (client)
using (NetworkStream stream = client.GetStream())
{
byte[] buffer = new byte[1024];
// 读取客户端数据
int len = await stream.ReadAsync(buffer);
string msg = Encoding.UTF8.GetString(buffer, 0, len);
Console.WriteLine($"收到:{msg}");
// 回复客户端
byte[] reply = Encoding.UTF8.GetBytes("服务端已收到");
await stream.WriteAsync(reply);
}
}
2. TCP 客户端(TcpClient)
csharp
using System.Net.Sockets;
using System.Text;
async Task StartTcpClientAsync()
{
TcpClient client = new TcpClient();
await client.ConnectAsync("127.0.0.1", 8888); // 连接服务端
Console.WriteLine("已连接服务端");
using (NetworkStream stream = client.GetStream())
{
// 发送数据
byte[] data = Encoding.UTF8.GetBytes("你好,服务端");
await stream.WriteAsync(data);
// 接收回复
byte[] buffer = new byte[1024];
int len = await stream.ReadAsync(buffer);
string msg = Encoding.UTF8.GetString(buffer, 0, len);
Console.WriteLine($"收到回复:{msg}");
}
}
补充重要说明
-
跨平台 :所有类在 .NET Framework / .NET Core / .NET 5~8 全平台支持(Windows/Linux/macOS);
-
异步优先 :推荐使用
async/await异步方法(避免界面卡顿); -
粘包问题 :TCP 是流协议,会出现粘包,
System.IO.Pipelines是最优解决方案; -
命名空间 :所有 TCP 核心类都需要引用:
csharpusing System.Net.Sockets;
总结
- 日常开发无脑用 :
TcpListener(服务端) +TcpClient(客户端) +NetworkStream(流读写) - 底层自定义 :
Socket - 高性能高并发 :
SocketAsyncEventArgs/System.IO.Pipelines