【网络】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 小时前
DeepSeek V4 全面换装华为昇腾 950PR
网络·人工智能·科技·深度学习·ai
geovindu2 小时前
密码进行加盐哈希 using CSharp,Python,Go,Java
java·python·golang·c#·哈希算法
oi..2 小时前
从 0 到 1:文件上传漏洞的校验、绕过与真实场景利用
网络·笔记·计算机网络·安全·web安全·网络安全·xss
傻啦嘿哟2 小时前
Python 操作 Word 文档属性与字数统计方法详解
开发语言·c#
云空2 小时前
《安全可用的AI Agent选型指南》
网络·人工智能·安全
傻啦嘿哟2 小时前
验证代理是否生效:OpenClaw中查看当前出口IP的3种方法
网络·网络协议·tcp/ip
IMPYLH2 小时前
Linux 的 readlink 命令
linux·运维·服务器·网络·bash
2401_873479402 小时前
通过IP地址查询判断网络风险,有哪些具体指标和判断方法?
网络·tcp/ip·网络安全
倔强的石头1062 小时前
NFS网络文件系统下企业级数据库安装排障实战:环境变量失效与权限问题的深度解析
网络·数据库