C# WinForm TCP-Socket
一、TCP 基础理论知识点 对应代码1.1 TCP 四大核心特点背诵知识点面向连接通信前三次握手建立连接流式无边界传输数据连续流传输需要固定缓冲区接收可靠传输自带确认重传无丢包全双工两端可同时收发数据1.2 Socket 核心构造参数知识点 对应代码知识点TCP 套接字固定三参数IPv4地址族、流式套接字、TCP协议// 对应考点TCP协议参数固定写法 new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);参数释义AddressFamily.InterNetwork使用 IPv4 协议SocketType.StreamTCP 流式传输ProtocolType.Tcp指定 TCP 通信协议二、服务端五步法new Socket()创建服务端监听对象Bind()绑定本机 IP 端口Listen(100)开启端口监听Accept()阻塞接收客户端连接Receive()循环接收客户端数据步骤1创建服务端Socket对象知识点代码知识点服务端全局声明Socket对象用于监听客户端连接// 服务端核心监听对象 Socket server null;步骤2自动获取本机IPv4地址知识点代码知识点自动遍历本机所有网卡筛选IPv4地址适配不同电脑string ipStr ; int port 63323; // 高位端口避免冲突 // 获取本机所有网络地址 IPHostEntry host Dns.GetHostEntry(Dns.GetHostName()); foreach (IPAddress item in host.AddressList) { // 只保留IPv4 if (item.AddressFamily AddressFamily.InterNetwork) { ipStr item.ToString(); } }步骤3绑定IP和端口Bind知识点代码知识点将Socket与本机IP、端口绑定对外开放服务端口IPAddress address IPAddress.Parse(ipStr); IPEndPoint endPoint new IPEndPoint(address, port); server.Bind(endPoint); // 绑定端口核心方法步骤4开启端口监听Listen知识点代码知识点Listen(最大挂起连接数)开启端口监听等待客户端接入server.Listen(100); // 允许最多100个排队连接步骤5异步监听多客户端连接Accept知识点代码知识点双层Task嵌套外层循环接收新客户端实现多客户端通信CancellationTokenSource cts; public void AcceptDataMul() { cts new CancellationTokenSource(); Task.Run(() { while (!cts.IsCancellationRequested) { // 阻塞接收客户端连接 Socket client server.Accept(); } }, cts.Token); }步骤6单客户端独立接收数据知识点代码知识点每个客户端独立子线程接收数据互不干扰修复TCP粘包BUG// 固定缓冲区解决TCP流式无边界粘包问题 byte[] buffer new byte[1024 * 10]; int length client.Receive(buffer); if (length 0) break; // 客户端离线断开步骤7跨线程UI更新必考知识点代码知识点子线程禁止直接操作UI必须使用Invoke回调主线程string recStr Encoding.UTF8.GetString(buffer, 0, length); Invoke(new Action(() { richTextBox1.AppendText(recStr Environment.NewLine); }));步骤8客户端断开资源释放知识点代码知识点捕获异常主动关闭套接字避免端口占用、内存泄漏catch (Exception) { client.Close(); client.Dispose(); break; }服务端关键考点自动筛选本机IPv4地址排除 IPv6多客户端原理双层 Task 外层循环 Accept 接客户端 内层每个客户端独立线程收数据跨线程 UI 报错解决子线程更新控件必须用InvokeTCP 粘包修复固定缓冲区new byte[1024*10]线程安全CancellationTokenSource安全终止后台任务四、客户端四步法创建客户端 Socket指定服务端IPEndPointIP 端口ConnectAsync 异步连接不卡死 UISend()发送数据步骤1声明客户端Socket知识点代码知识点单客户端通信仅需一个Socket对象Socket client;步骤2创建客户端Socket知识点代码知识点客户端参数与服务端一致保证通信协议匹配client new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);步骤3配置服务端终端节点知识点代码知识点客户端必须指定服务端精准IP端口才能连接IPEndPoint endpoint new IPEndPoint(IPAddress.Parse(192.168.219.12), 63323);步骤4异步连接服务端核心考点代码知识点ConnectAsync异步连接不阻塞UI主线程避免界面卡死await client.ConnectAsync(endpoint);步骤5连接成功UI状态联动知识点代码知识点禁止重复连接按钮状态互斥优化交互逻辑label1.Text 连接成功; button1.Enabled false; button2.Enabled true;步骤6连接失败容错处理知识点代码知识点捕获服务端未开启、IP错误、端口错误异常label1.Text 连接成功; button1.Enabled false; button2.Enabled true;五、客户端发送数据 知识点逐段对应5.1 连接状态校验防报错知识点代码知识点发送数据前必须判断Socket非空、处于连接状态if (client null || !client.Connected) { MessageBox.Show(还没连接到服务器请先连接服务器); return; }5.2 空数据校验规范考点代码知识点禁止发送空数据无效通信拦截if (string.IsNullOrEmpty(textBox1.Text)) { MessageBox.Show(发送数据不能为空); return; }5.3 UTF8编码转换乱码解决考点代码知识点收发统一UTF8编码彻底解决中文乱码byte[] data Encoding.UTF8.GetBytes(textBox1.Text); client.Send(data); label1.Text 发送成功;5.4 异常完整资源释放高频考点代码知识点三段式资源释放关闭通道→关闭连接→释放资源if (client ! null) { if (client.Connected) client.Shutdown(SocketShutdown.Both); // 关闭读写通道 client.Close(); // 关闭连接 client.Dispose(); // 释放资源 } // 重置按钮状态 button1.Enabled true; button2.Enabled false;客户端安全规范发送前判空client!null client.Connected禁止发送空字符串统一UTF8 编码防止中文乱码异常三步释放资源Shutdown→Close→Dispose五、高频易错点5.1 线程安全控制CancellationToken知识点使用取消令牌安全终止异步线程杜绝后台线程残留CancellationTokenSource cts2 new CancellationTokenSource(); Task.Run(() {}, cts2.Token);5.2 修复TCP原生粘包BUG知识点废弃 client.Available 动态缓冲区使用固定缓冲区循环接收// 正确写法 byte[] buffer new byte[1024 * 10]; int length client.Receive(buffer); // 错误原生写法已废弃 // byte[] buffer new byte[client.Available];禁止子线程直接操作 UI必须 InvokeTCP 无数据边界禁用 client.Available端口建议高位10000防冲突客户端 IP 必须与服务端本机 IPv4 一致必须异步连接同步 Connect 会卡死界面通信完毕必须释放资源否则端口占用、内存泄漏

相关新闻

Istio 服务网格入门:流量管理、安全与可观测性

Istio 服务网格入门:流量管理、安全与可观测性

Istio 服务网格入门:流量管理、安全与可观测性工具地址:https://www.speedce.com 社区论坛:https://bbs.speedce.com 联系:speedceadsgmail.com写在前面 服务网格增加了复杂度,外部可达性验收更重要。 本文是一份围绕「…

2026/10/24 20:58:18 阅读更多 →
16|设计一个AI业务知识分析台:它首先应该解决BA的哪些任务?

16|设计一个AI业务知识分析台:它首先应该解决BA的哪些任务?

食味里“川香鸡腿饭套餐”项目结束后,BA林悦做了一次复盘。她发现自己每天都在不同工具之间搬运同一批业务信息。 企微里是商品、研发、供应链和门店的讨论;录音转写里藏着尚未确认的业务规则;OA附件里有新品审批;Excel里维护产品…

2026/10/25 23:19:15 阅读更多 →
具身智能TVA-VLA实现前瞻协同交互新突破

具身智能TVA-VLA实现前瞻协同交互新突破

前沿技术探索:TVA智能体(简称TVA)TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的系统级视觉技术框架。它融合深度强化学习(DRL)、卷积神…

2026/11/2 6:34:21 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/13 5:13:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/13 5:13:25 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/13 5:13:25 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/13 5:13:25 阅读更多 →

日新闻

周新闻

月新闻