1. 项目概述与核心价值
这个Socket双向转发工具是我在学习网络编程时开发的一个教学演示项目,它完美展示了TCP Socket通信中最基础也最重要的"服务端多连接处理"和"数据转发"机制。项目使用C# WinForm实现,通过两个独立的Socket线程监听不同端口,实现客户端A和客户端B之间的数据无损双向转发。
为什么这个项目值得学习?
- 直观展示Socket通信核心流程:绑定端口→监听连接→建立数据流→读写数据
- 演示多线程在Socket编程中的典型应用场景
- 提供可立即运行的完整代码示例(仅需Visual Studio即可编译)
- 代码精简(核心逻辑不到100行)但功能完整
- 可作为更复杂网络应用的开发基础模板
提示:项目默认使用12345和12346端口,如果被占用可以在代码中修改。建议在Windows防火墙中放行这两个端口,或者调试时临时关闭防火墙。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心架构解析
2.1 线程模型设计
项目采用经典的双线程架构,每个线程独立处理一个Socket连接:
code复制主线程(UI线程)
├── Socket线程A (端口12345)
│ ├── 监听连接
│ ├── 接收数据
│ └── 转发到线程B
└── Socket线程B (端口12346)
├── 监听连接
├── 接收数据
└── 转发到线程A
这种设计保证了:
- 两个Socket连接互不阻塞
- UI线程不会被网络操作冻结
- 转发逻辑清晰直观
2.2 关键类与组件
| 类/组件 | 作用 | 重要属性/方法 |
|---|---|---|
| TcpListener | 监听TCP连接请求 | Start(), AcceptTcpClient() |
| TcpClient | 表示客户端连接 | GetStream() |
| NetworkStream | 提供网络数据读写能力 | Read(), Write() |
| Thread | 使Socket操作在后台运行 | Start() |
3. 完整实现详解
3.1 变量定义与初始化
csharp复制// 定义监听器和线程
private TcpListener listenerA, listenerB;
private Thread threadA, threadB;
private NetworkStream streamA, streamB;
// 构造函数初始化
public Form1()
{
InitializeComponent();
// 创建监听器实例
