【网络】C#TCP 通讯

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 粘包/分包问题,微软官方推荐

✅ 适用场景:高并发服务器、低延迟通讯、大数据量传输


四、快速选型(直接照抄)

  1. 新手/普通项目TcpListener + TcpClient + NetworkStream(90% 场景)
  2. 自定义通信逻辑Socket
  3. 高并发服务器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}");
    }
}

补充重要说明

  1. 跨平台 :所有类在 .NET Framework / .NET Core / .NET 5~8 全平台支持(Windows/Linux/macOS);

  2. 异步优先 :推荐使用 async/await 异步方法(避免界面卡顿);

  3. 粘包问题 :TCP 是流协议,会出现粘包,System.IO.Pipelines 是最优解决方案;

  4. 命名空间 :所有 TCP 核心类都需要引用:

    csharp 复制代码
    using System.Net.Sockets;

总结

  1. 日常开发无脑用TcpListener(服务端) + TcpClient(客户端) + NetworkStream(流读写)
  2. 底层自定义Socket
  3. 高性能高并发SocketAsyncEventArgs / System.IO.Pipelines
相关推荐
唐青枫2 小时前
别再乱用 StartNew:C#.NET TaskFactory 任务调度实战详解
c#·.net
Artech10 小时前
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力
ai·c#·agent·memory·maf
Scout-leaf2 天前
C#摸鱼实录——IoC与DI案例详解
c#
咕白m6252 天前
使用 C# 在 Excel 中应用多种字体样式
后端·c#
Artech2 天前
[MAF预定义的AIContextProvider-02]AgentSkillsProvider——将Agent Skills引入MAF
ai·c#·agent·agent skills·maf
网络研究院3 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
treesforest3 天前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
2601_961845153 天前
粉笔行测题库|系统班|刷题
网络·百度·微信·微信公众平台·facebook·新浪微博