news 2026/8/4 5:31:35

C# WinForm TCP Socket

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C# WinForm TCP Socket

一、基础定义

  1. Socket(套接字)网络通信端点,负责程序之间的数据传输;IP地址(定位设备) + 端口号(定位程序) = Socket

  2. TCP 协议面向连接、可靠传输;通信前建立连接,数据不会丢失乱序。

  3. 命名空间(必须引入)

using System.Net; using System.Net.Sockets; using System.Threading.Tasks; using System.Threading;

二、核心类定义 + 语法

1. Socket 类

作用:创建套接字,网络通信核心对象 构造语法:

Socket 变量名 = new Socket(地址类型,传输类型,协议类型);

参数说明

  • AddressFamily.InterNetwork→ IPv4
  • SocketType.Stream→ TCP 流式传输
  • ProtocolType.Tcp→ 使用 TCP 协议
Socket 常用方法
方法使用端作用
Bind(IPEndPoint)服务端绑定本机 IP 和端口
Listen(int)服务端开启端口监听,参数为最大排队连接数
Accept()服务端阻塞等待客户端连接,返回客户端 Socket
Connect(IPEndPoint)客户端同步连接服务器
ConnectAsync()客户端异步连接(不卡死窗口)
Send(byte[])两端发送字节数组数据
Receive(byte[])两端阻塞接收字节数据
Shutdown(SocketShutdown.Both)两端停止收发数据(规范关闭前置)
Close()/Dispose()两端关闭套接字,释放端口资源

2. 地址相关类

  1. IPAddress:存放 IP 地址
IPAddress ip = IPAddress.Parse("192.168.1.10");
  1. IPEndPoint:终端对象 = IP + 端口
IPEndPoint endPoint = new IPEndPoint(ip, 63323);

3. 字符串 ↔ 字节数组

⚠️网络只能传输 byte [],不能直接传输 string

//发送:字符串 → 字节数组 byte[] arr = Encoding.UTF8.GetBytes("消息内容"); //接收:字节数组 → 字符串 string text = Encoding.UTF8.GetString(字节数组);

4. Task 后台任务

定义:新开后台线程,避免Accept()、Receive()阻塞导致窗体卡死 语法:

Task.Run(()=>{ //后台执行代码 });

5. CancellationTokenSource

定义:安全终止循环后台任务,替代危险的强制关闭线程

//创建取消信号对象 CancellationTokenSource cts = new CancellationTokenSource(); //判断是否需要终止循环 while(!cts.IsCancellationRequested) //发送停止信号 cts.Cancel();

6. Invoke【必考语法!跨线程访问控件】

定义:后台线程不允许直接操作 WinForm 控件,会报错跨线程操作无效。 标准语法:

Invoke(new Action(()=>{ //此处写所有控件操作代码 richTextBox1.AppendText("收到消息"); }));

7. 集合类(多客户端服务端使用)

  • Dictionary<Key,Value>字典
//存储所有在线客户端 Dictionary<EndPoint, Socket> clients = new Dictionary<EndPoint, Socket>(); //添加 clients.Add(key,value); //遍历 foreach(var item in clients)
  • List<T>泛型集合
List<Client> list = new List<Client>();

三、自定义类语法(课堂 Client 类)

封装客户端信息

public class Client { public EndPoint EndPoint { get; set; } public Socket Socket { get; set; } }

四、TCP 通信标准流程(背诵)

服务端

new Socket → Bind 绑定 → Listen 监听 → Accept 等待客户端连接 → Send/Receive 收发数据

客户端

new Socket → ConnectAsync 连接服务器 → Send/Receive 收发数据

五、重难点语法提醒

  1. Accept()Receive()属于阻塞方法,必须放在 Task 后台运行
  2. 收发数据只支持byte[],字符串必须进行编码转换
  3. 所有后台线程修改界面控件,必须套Invoke
  4. 通信结束必须调用Close()释放 Socket,否则端口占用
  5. 多客户端:每连接成功一个客户端,就要开启独立 Task 循环接收消息
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/4 5:30:50

智能英文名生成系统:基于谐音匹配与知识图谱的命名算法实践

1. 项目概述&#xff1a;一个名字背后的文化与技术你有没有想过&#xff0c;你的英文名可能正在悄悄“出卖”你&#xff1f;我说的不是隐私&#xff0c;而是你的文化背景、个人偏好&#xff0c;甚至是你起名时那份微妙的心理。一个叫“Cherry”的女孩&#xff0c;可能希望自己甜…

作者头像 李华
网站建设 2026/8/4 5:28:40

C/C++头文件守卫:从#ifndef到#pragma once的编译保护机制

1. 从一次编译错误说起&#xff1a;为什么需要“守卫” 那天下午&#xff0c;我正在调试一个规模不小的C项目。代码编译了几十次都没问题&#xff0c;但当我尝试将两个独立的模块合并&#xff0c;并引入一个新的公共头文件时&#xff0c;编译器突然报出了一连串令人困惑的错误&…

作者头像 李华
网站建设 2026/8/4 5:27:33

MATLAB Control System Tuner:自动化控制系统调参实战

1. 控制调谐器工具概述Control System Tuner是MATLAB控制工具箱中的一款交互式应用程序&#xff0c;专门用于调节SISO和MIMO控制系统的参数。这个工具通过图形化界面简化了传统控制系统的调试流程&#xff0c;特别适合处理多变量控制系统和复杂PID结构的调参问题。我第一次接触…

作者头像 李华
网站建设 2026/8/4 5:26:09

投票制作平台哪个好用?2026投票活动场景分类指南

组织一场线上投票活动&#xff0c;选对工具往往比想象中更重要。市面上以“免费”为亮点的投票工具不少&#xff0c;但真正能做到全程无广告、功能齐全的其实不多。本文基于多轮实测&#xff0c;从不同活动场景出发&#xff0c;梳理四款主流投票平台的核心特点与适用方向。 一、…

作者头像 李华
网站建设 2026/8/4 5:24:32

React Native与鸿蒙适配的技术挑战与解决方案

1. React Native与鸿蒙适配的技术背景解析2026年React Native官方路线图中对鸿蒙系统的适配支持引发了广泛讨论。作为一名经历过多次跨平台框架迁移的移动端开发者&#xff0c;我认为这次适配之所以成本高昂&#xff0c;核心原因在于两种技术栈在设计理念和底层架构上的根本性差…

作者头像 李华
网站建设 2026/8/4 5:24:07

一次 nacos 配置不生效问题的总结

这是一个典型的 Nacos 配置覆盖/优先级 问题。@Value 只拿到了代码中的默认值 449,说明 Nacos 中的配置 1552 没有生效。 我帮你分析一下可能的原因和解决方案: 🔍 问题排查步骤 1. 确认 Nacos 配置是否真的加载了 在启动类或配置类上加 @RefreshScope,并在日志中打印配…

作者头像 李华