【网络】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
相关推荐
酣大智4 小时前
网络协议计时器 & 发包间隔汇总
运维·网络·tcp/ip
林川~0110 小时前
Unity 万能物理检测工具:射线检测 / 范围检测 / 层级过滤 / 编辑器可视化(可直接拿去用)
游戏·unity·c#·射线检测·通用工具
Hrain-AI10 小时前
多 Agent 并行不打架:worktree 隔离与反馈回流落地(附脚本)
网络·数据库·人工智能·架构
云运维笔记10 小时前
IP地址从入门到精通:网络通信的核心基石
运维·网络·计算机网络
Koi慢热10 小时前
DayDayMap学术社区体验:卫星网络测绘专题用下来怎么样
网络·人工智能·windows·web安全·网络安全
万联WANFLOW11 小时前
从“连接网络”到“编排业务”:企业网络架构正在发生什么变化?
网络·人工智能
kuroomi12 小时前
Ingress-Nginx与kubernetes 网络
linux·运维·网络·kubernetes
IpdataCloud12 小时前
AI智能体调用工具怎么核验来源IP?归属地、网络类型与代理风险识别(含Python代码)
数据库·python·tcp/ip
Yang961112 小时前
鼎讯101C测向天线200MHz至500MHz比幅测向解读
网络
yi碗汤园13 小时前
OSS对象存储服务
网络·阿里云