TcpSocket 1.0.0

TcpSocket 使用说明(TcpServerEx / TcpClientEx)

这是一个 轻量、稳定、单 TCP 连接 的 C# Socket 通信封装,
特点是:

  • ✅ 单连接 / 多客户端 Server
  • ✅ 同步 + 异步 Send 统一实现(线程安全)
  • ✅ 明确的 帧结束符协议
  • ✅ 无 Session / 无复杂队列
  • ✅ 适合 工控 / 设备通信 / WPF 后台服务

一、通信协议说明(非常重要)

1️⃣ 帧结束符(End Of Frame)

public class Global
{
    public static byte[] EndOfByte = { 0x03, 0x04 };
}

每一条完整消息 = 数据内容 + EndOfByte

Server / Client 都必须使用同一 EndOfByte

内部使用 KMP 算法解析粘包 / 拆包

二、基础类型说明

IPHost

public class IPHost
{
    public string Address { get; }
    public int Port { get; }

    public IPHost(string address, int port = 0)
    {
        Address = address;
        Port = port;
    }

    public override string ToString()
        => $"{Address}:{Port}";
}

三、TcpServerEx 使用方法

1️⃣ 创建并启动 Server

var server = new TcpServerEx("127.0.0.1:9000");

server.ListenClientEvent += (client, clientId) =>
{
    Console.WriteLine($"Client Accepted: {clientId}");
};

server.ConnectingEvent += (sender, clientId) =>
{
    Console.WriteLine($"Client Connecting: {clientId}");
};

server.DataReceivedEvent += (clientId, data) =>
{
    Console.WriteLine($"[{clientId}] {data}");
};

server.DisconnectedEvent += (sender, clientId) =>
{
    Console.WriteLine($"Client Disconnected: {clientId}");
};

server.Start();

2️⃣ 发送数据(Server → Client)

同步发送
server.Send(clientId, "HELLO CLIENT");
异步发送(推荐)
await server.SendAsync(clientId, "HELLO CLIENT");   
广播
server.SendAll("BROADCAST MESSAGE");
await server.SendAllAsync("ASYNC BROADCAST");
⚠️ 同步 / 异步 共用 SemaphoreSlim

3️⃣ 停止 Server

server.Stop();

自动关闭 Listener
自动断开所有 Client
自动释放 SemaphoreSlim

四、TcpClientEx 使用方法

1️⃣ 创建并连接 Client

var client = new TcpClientEx("127.0.0.1:9000");

client.ConnectedEvent += (sender, id) =>
{
    Console.WriteLine("Connected to server");
};

client.DataReceivedEvent += (id, data) =>
{
    Console.WriteLine($"Server says: {data}");
};

await client.ConnectAsync();

2️⃣ 发送数据(Client → Server)

同步
client.Send("HELLO SERVER");
异步(推荐) 
await client.SendAsync("HELLO SERVER");

3️⃣ 断开连接

client.Disconnect();

五、事件一览(Server / Client 通用)

事件说明


ListenClientEvent	Server 接收到新客户端
ConnectingEvent	客户端开始处理
ConnectedEvent	Client 连接成功
DataReceivedEvent	接收到完整帧数据
DisconnectedEvent	连接断开

六、线程安全 & 设计说明

✔ 发送安全 每个 Client 独立 SemaphoreSlim

同步 / 异步 Send 统一入口

不会出现粘包 / 并发写异常

✔ 接收安全 单独 Receive Loop

KMP 算法解析 EndOfByte

自动处理粘包 / 拆包

✔ 停止安全

CancellationToken 控制

Listener.Stop() + Dispose

不残留后台线程

七、适用场景

✔ 工控设备通信 ✔ 上位机 / 下位机 ✔ WPF 后台 Socket 服务 ✔ 长连接指令 / 响应模型

❌ 不适合:

HTTP / WebSocket

高吞吐 IM(建议用 Pipe / Kestrel)

八、注意事项(必看)

Client / Server 的 EndOfByte 必须一致

消息体中不要主动包含 0x03 0x04

UI 线程请使用 SendAsync

不要在外部直接操作 NetworkStream

No packages depend on TcpSocket.

.NET Framework 4.8

  • No dependencies.

Version Downloads Last updated
1.0.0 4 12/24/2025