当前位置: 首页 > article >正文

C#基于TCP通信协议的实现示例

1. 客户端代码TCpClient/Program.cs该代码实现了一个基础的 TCP 客户端程序核心逻辑是与指定 IP 和端口的 TCP 服务器建立连接向服务器发送控制台输入的字符串数据并接收服务器的响应数据最后释放连接资源。核心步骤包括定义服务器 IP172.16.0.14和端口9898通过TcpClient发起连接底层触发 TCP 三次握手获取NetworkStream网络流完成数据的发送与接收异常捕获与资源释放关闭流和连接底层触发 TCP 四次挥手。2. 服务器端代码TCPServer/Program.cs该代码实现了一个基础的 TCP 服务器程序核心逻辑是监听指定端口9898等待并接收客户端连接读取客户端发送的数据向客户端返回响应同时保留了另一版监听8888端口的注释代码。核心步骤包括绑定并监听9898端口阻塞等待客户端连接AcceptTcpClient()获取NetworkStream循环读取客户端数据并返回响应异常捕获与资源释放。二、网络编程核心概念与原理1. 什么是网络编程网络编程是指编写运行在不同设备计算机、嵌入式设备等上的程序通过网络协议实现设备间的数据通信。简单来说就是让两台 / 多台设备 “对话” 的编程方式。其核心目标是跨设备的数据传输与交互依赖 TCP/IP 协议族等基础网络协议TCP 是其中最常用的 “可靠传输协议”。2. TCP 网络编程核心原理TCPTransmission Control Protocol传输控制协议是一种面向连接、可靠、基于字节流的传输层协议也是本次示例代码的核心依赖1核心特性面向连接通信前必须通过 “三次握手” 建立连接通信结束通过 “四次挥手” 断开连接可靠性通过序列号、确认应答、重传机制保证数据不丢失、不重复、按序到达字节流数据以 “字节” 为单位连续传输无边界需通过缓冲区和读取长度判断数据范围。2三次握手建立连接类比生活中 “打电话”客户端 → 服务器“喂能听到吗”SYN 报文请求建立连接服务器 → 客户端“能听到你能听到我吗”SYNACK 报文确认请求并反问客户端 → 服务器“能听到开始沟通吧”ACK 报文连接建立。代码中1newTcpClient(server, port)是客户端发起第一次握手1AcceptTcpClient()是服务器完成三次握手的关键操作。3四次挥手断开连接类比 “挂电话”主动方 → 被动方“我说完了准备挂了”FIN 报文请求断开被动方 → 主动方“知道你说完了我确认下数据”ACK 报文确认断开请求被动方 → 主动方“我也说完了你可以挂了”FIN 报文告知数据发完主动方 → 被动方“好的挂了”ACK 报文断开连接。代码中1stream.Close()1client.Close()是触发四次挥手的核心操作。三、完整示例代码可直接运行1. TCP 客户端完整代码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455usingSystem;usingSystem.Net.Sockets;usingSystem.Text;​namespaceTCpClient{internalclassProgram{staticvoidMain(string[] args){// 定义服务器的IP地址和端口号stringserverIp 172.16.0.14;// 替换为实际服务器IP本机测试可填127.0.0.1intserverPort 9898;​TcpClient tcpClient null;NetworkStream networkStream null;​try{// 1. 建立TCP连接底层三次握手tcpClient newTcpClient(serverIp, serverPort);Console.WriteLine($成功连接到服务器 {serverIp}:{serverPort});​// 2. 获取网络流用于数据收发networkStream tcpClient.GetStream();​// 3. 发送数据到服务器Console.WriteLine(请输入要发送的消息);stringsendMessage Console.ReadLine();byte[] sendData Encoding.UTF8.GetBytes(sendMessage);networkStream.Write(sendData, 0, sendData.Length);Console.WriteLine($客户端已发送{sendMessage});​// 4. 接收服务器响应byte[] receiveBuffer newbyte[256];// 定义缓冲区存储接收的数据intreceiveBytes networkStream.Read(receiveBuffer, 0, receiveBuffer.Length);stringreceiveMessage Encoding.UTF8.GetString(receiveBuffer, 0, receiveBytes);Console.WriteLine($客户端收到服务器响应{receiveMessage});}catch(Exception ex){Console.WriteLine($连接/通信异常{ex.Message});}finally{// 5. 释放资源底层四次挥手if(networkStream !null) networkStream.Close();if(tcpClient !null) tcpClient.Close();}​Console.WriteLine(客户端程序结束按任意键退出...);Console.ReadKey();}}}2. TCP 服务器完整代码1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768usingSystem;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.Text;​namespaceTCPServer{internalclassProgram{staticvoidMain(string[] args){// 定义监听端口intlistenPort 9898;TcpListener tcpListener null;TcpClient client null;NetworkStream networkStream null;​try{// 1. 初始化监听器并启动监听tcpListener newTcpListener(IPAddress.Any, listenPort);tcpListener.Start();Console.WriteLine($服务器已启动正在监听端口 {listenPort}...);​// 2. 循环等待客户端连接单线程仅处理一个客户端while(true){// 阻塞等待客户端连接client tcpListener.AcceptTcpClient();Console.WriteLine(有客户端成功连接);​// 3. 获取网络流处理数据交互networkStream client.GetStream();byte[] receiveBuffer newbyte[256];intreadBytes;​// 循环读取客户端发送的数据直到客户端断开while((readBytes networkStream.Read(receiveBuffer, 0, receiveBuffer.Length)) ! 0){// 解析接收的字节数据为字符串stringreceiveMessage Encoding.UTF8.GetString(receiveBuffer, 0, readBytes);Console.WriteLine($服务器收到客户端数据{receiveMessage});​// 4. 向客户端发送响应stringresponseMessage 已收到客户端消息;byte[] responseData Encoding.UTF8.GetBytes(responseMessage);networkStream.Write(responseData, 0, responseData.Length);Console.WriteLine($服务器已发送响应{responseMessage});}}}catch(Exception ex){Console.WriteLine($服务器异常{ex.ToString()});}finally{// 5. 释放资源if(networkStream !null) networkStream.Close();if(client !null) client.Close();if(tcpListener !null) tcpListener.Stop();}​Console.WriteLine(服务器程序结束按任意键退出...);Console.ReadKey();}}}四、代码运行说明1. 环境准备开发工具Visual Studio 2019/2022或其他支持.NET Framework/.NET Core 的 IDE框架版本.NET Framework 4.5 或 .NET Core 3.1代码兼容。2. 运行步骤先运行TCP 服务器程序控制台输出 “服务器已启动正在监听端口 9898...”再运行TCP 客户端程序客户端控制台提示 “成功连接到服务器”输入任意字符串如 “Hello Server!”并回车客户端显示 “已发送”并接收服务器响应 “已收到客户端消息”服务器端显示 “有客户端成功连接”并打印收到的 “Hello Server!”同时提示 “已发送响应”。五、生活例子理解 TCP 网络编程例子 1快递配送类比 TCP 可靠传输服务器 快递公司仓库客户端 你收件人建立连接三次握手你下单SYN→ 仓库确认接单SYNACK→ 你确认ACK数据传输可靠仓库打包商品数据转字节→ 快递员配送网络传输→ 你签收确认应答若快递丢失仓库重发重传机制断开连接四次挥手你确认收完货FIN→ 仓库确认ACK→ 仓库确认无遗漏FIN→ 你确认ACK交易结束。例子 2餐厅点餐类比客户端 - 服务器交互服务器 餐厅固定位置监听 “点餐请求”客户端 顾客监听餐厅开门启动TcpListener等待顾客建立连接你走进餐厅客户端发起连接服务员接待AcceptTcpClient数据交互你说 “要牛肉面”客户端发送数据→ 服务员回复 “好的”服务器响应断开连接你吃完离开关闭连接服务员结束服务释放资源。

相关文章:

C#基于TCP通信协议的实现示例

1. 客户端代码(TCpClient/Program.cs)该代码实现了一个基础的 TCP 客户端程序,核心逻辑是与指定 IP 和端口的 TCP 服务器建立连接,向服务器发送控制台输入的字符串数据,并接收服务器的响应数据,最后释放连接…...

告别混乱:如何在不同Linux发行版(openEuler/Ubuntu)和Windows上彻底卸载AWS CLI v2

彻底卸载AWS CLI v2:跨平台深度清理指南当AWS CLI v2出现版本冲突、配置混乱或需要重新安装时,简单的删除操作往往无法彻底清除所有痕迹。本文将深入探讨如何在Windows、Ubuntu和openEuler系统上执行外科手术式卸载,确保不留任何残留文件。1.…...

量子计算与生成式AI融合:自动化电路生成技术解析

1. 量子计算与生成式AI的交叉领域概述量子计算作为下一代计算范式,正在经历从理论到实践的转变过程。在这个过程中,量子电路的设计与实现成为关键瓶颈。传统手工编写量子电路的方式效率低下,难以满足日益复杂的量子算法需求。与此同时&#x…...

量子机器学习分类器性能杀手:数据诱导随机性与类间隔理论解析

1. 项目概述 量子机器学习(QML)这几年挺火的,大家都想看看量子计算能不能在机器学习任务上带来点新东西。但说实话,很多早期的实验和理论分析都指向一个挺让人头疼的问题:模型动不动就“学废了”。表现就是&#xff0c…...

机器学习模型虚假相关性识别与应对:四大评估框架与实战指南

1. 项目概述:当模型学会了“走捷径”在机器学习项目里摸爬滚打这么多年,我越来越觉得,模型训练最让人头疼的,不是调不出更高的准确率,而是你永远不知道它到底“学会”了什么。很多时候,模型在测试集上表现优…...

DML1与DML2在LATE估计中的性能差异与选择指南

1. 项目概述:为什么我们需要关心DML1和DML2的选择?如果你在因果推断或者计量经济学的项目里用过机器学习,大概率听说过“去偏机器学习”这个名字。这东西听起来挺玄乎,但说白了,它就是一种高级的“纠偏”工具。我们做政…...

SSH命令行指定密码登录的真相与安全替代方案

1. 这个命令根本不能用:先破除一个广泛流传的误解你是不是在某篇技术笔记、某次运维排查,或者某个深夜赶工的场景里,看到过类似sshpasswd -p paswd ssh username192.168.1.100这样的写法?甚至可能还复制粘贴试过,结果报…...

Outlook CVE-2023-36895:MAPI与HTML渲染器间的类型混淆漏洞

1. 这个漏洞不是“点开邮件就中招”,但比你想象的更危险CVE-2023-36895,微软在2023年8月补丁星期二发布的那个Outlook远程代码执行漏洞,标题里写着“远程代码执行”,很多人第一反应是:“完了,我昨天刚看了封…...

连续处理效应下的双重差分:从二元到连续的范式演进与DML应用

1. 连续处理效应下的双重差分:从二元到连续的范式演进双重差分(Difference-in-Differences, DiD)是评估政策或干预因果效应的基石方法。它的核心逻辑直观而有力:比较处理组和对照组在干预前后的结果变化,其差值就被认为…...

基于图神经网络与LLM的Java空安全注解自动化推断技术解析

1. 项目概述与核心挑战 在Java开发中,空指针异常(NullPointerException)堪称“十亿美元的错误”,是运行时崩溃和逻辑缺陷的主要来源之一。为了在编译期捕获这类问题,业界引入了可插拔类型系统(Pluggable Ty…...

从哈密顿量到李代数:对称性识别与结构常数计算实践

1. 从哈密顿量到李代数:物理学家工具箱里的对称性语言在理论物理和数学物理的日常工作中,我们常常面对一个核心问题:如何从一堆看似复杂的运动方程或一个写出来的哈密顿量中,快速识别出系统隐藏的“灵魂”?这个灵魂&am…...

高阶信息度量:总相关性与O信息在特征工程与数据压缩中的应用

1. 从信息论到机器学习:为什么我们需要更精细的“相关性”度量如果你做过机器学习项目,尤其是涉及高维数据特征工程或者模型解释性分析时,大概率会碰到一个头疼的问题:我们如何量化一组特征变量之间的“整体关系”?传统…...

SELA框架:融合MCTS与LLM的智能AutoML新范式

1. SELA框架:当MCTS的“棋手”思维遇上LLM的“专家”直觉在数据科学项目里,最耗时的往往不是敲代码,而是做决策。面对一个新的表格数据集,从数据清洗、特征工程到模型选型、调参,每一步都像站在一个岔路口,…...

量子软件不稳定测试检测:基于机器学习的自动化解决方案

1. 量子软件测试中的“幽灵”:不稳定测试的挑战与机遇在量子软件开发的日常工作中,最让人头疼的莫过于那些“薛定谔的测试”——你永远不知道下一次运行它会通过还是失败。这就是不稳定测试(Flaky Tests),它们像幽灵一…...

范畴论视角下的机器学习系统:从代数结构到工程实践

1. 机器学习系统:从孤立元素到结构化网络的视角转变我们每天都在和数据、算法、模型打交道。数据清洗、特征工程、模型训练、评估部署,这些环节构成了一个典型的机器学习项目流程。长久以来,我们习惯于将这些元素视为独立的、线性的步骤&…...

机器学习赋能密度泛函理论:构建半局域交换关联泛函攻克强关联体系

1. 项目概述与核心思路在计算凝聚态物理和量子化学领域,密度泛函理论(Density Functional Theory, DFT)无疑是过去几十年里最成功的“第一性原理”计算方法。它的核心魅力在于,通过Hohenberg-Kohn定理,将描述N个相互作…...

量子机器学习在基因组分类中的实践:特征映射与模型选择指南

1. 项目概述:当量子计算遇上基因组学如果你和我一样,既对量子计算的神秘力量感到好奇,又长期在生物信息学的数据海洋里“游泳”,那么“量子机器学习”这个交叉领域绝对值得你投入时间。这听起来像是科幻小说的情节,但现…...

基于群论的双曲空间统计建模:从莫比乌斯分布到高效算法

1. 项目概述:为什么我们需要双曲空间与群论?如果你处理过社交网络、知识图谱或者自然语言中的词汇关系,一定对“层次结构”这个词不陌生。想象一下,你要把整个维基百科的词条关系,或者一个公司的组织架构图&#xff0c…...

Midjourney对比度黄金公式:Contrast = f(–sref, –style, –iw) × 0.942(基于12,846张生成图回归验证)

更多请点击: https://kaifayun.com 第一章:Midjourney对比度控制的底层逻辑与黄金公式的提出 Midjourney 的图像生成并非直接操控像素级参数,而是通过扩散模型对潜空间(latent space)中语义强度与视觉张力的联合建模实…...

从零搭建一个疫情数据看板:用Python(pymysql+Flask+ECharts)实战全流程

从零搭建省级数据可视化看板:Python全栈技术实战 最近几年,数据可视化在各行各业的应用越来越广泛。无论是企业内部的运营数据监控,还是面向公众的信息展示,一个直观、动态的数据看板都能极大提升信息传达效率。对于Python开发者来…...

自动驾驶、机器人导航都在用:实战调参卡尔曼滤波的Q和R(Python/OpenCV示例)

自动驾驶与机器人导航中的卡尔曼滤波实战:Q和R参数调优指南卡尔曼滤波在状态估计领域就像一位不知疲倦的裁判,不断在系统预测和传感器测量之间寻找平衡点。而Q(过程噪声协方差)和R(测量噪声协方差)这两个关…...

基于Hugging Face BART模型构建文本摘要服务:从原理到部署实战

1. 项目概述:从零构建一个可用的文本摘要服务文本摘要,这个听起来有点学术的词,其实离我们很近。想想看,每天面对海量的新闻、报告、论文,甚至冗长的会议纪要,谁不想快速抓住核心要点?这就是文本…...

构建全球生活便利度指数:多维数据驱动的发展评估框架

1. 项目概述:从数据视角看世界发展作为一名长期和数据打交道的分析师,我常常被问到:如何客观地衡量一个国家或地区的发展水平?是看GDP总量,还是人均收入?是看高楼大厦的数量,还是普通民众的幸福…...

智能电表数据填补技术对比:从Holt-Winters到Time-MoE的实战指南

1. 项目概述:当智能电表数据“断片”时,我们如何“脑补”?在能源管理和智能电网的日常运维中,我们这些从业者最头疼的问题之一,就是拿到手的智能电表数据“缺斤短两”。想象一下,你正试图分析一个居民区的用…...

子黎曼几何与庞特里亚金原理:约束系统时间最优控制

1. 从黎曼到子黎曼:当几何遇见约束 在物理和工程的世界里,我们常常需要为系统寻找一条“最优”的路径。无论是让量子比特以最快的速度演化到目标态,还是规划机器人在复杂地形中的最短时间轨迹,其背后都隐藏着一个深刻的几何问题&a…...

条件期望与奇异值分解:概率论与矩阵分析中的最优逼近原理

1. 项目概述:连接概率与矩阵的数学桥梁在数据科学和机器学习的日常工作中,我们常常在两个看似独立的数学世界里穿梭:一个是处理不确定性和随机性的概率论,另一个是处理高维数据和线性结构的矩阵分析。很多从业者可能熟悉主成分分析…...

IEMOCAP数据集预处理实战:用Python和Librosa搞定语音情感识别的数据准备

IEMOCAP数据集预处理实战:用Python和Librosa搞定语音情感识别的数据准备语音情感识别(SER)作为人机交互领域的重要研究方向,其核心挑战之一是如何从原始音频中提取有效的特征表示。本文将手把手带你完成IEMOCAP数据集的预处理全流…...

Atmosphère系统架构深度解析:分层安全模型与模块化设计哲学

Atmosphre系统架构深度解析:分层安全模型与模块化设计哲学 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable Atmosphre作为Nintendo Switch的自定义固件,其核心价值在…...

内存访问向量技术如何提升CPU性能模拟精度

1. 从20%误差到98%精准:内存访问向量如何革新CPU性能模拟 在处理器设计领域,性能模拟的准确性直接关系到数亿美元研发投入的成败。传统SimPoint采样方法虽然大幅降低了仿真时间,但当遇到523.xalancbmk_r这类具有复杂间接内存访问模式的基准测…...

FlexNet Publisher Host ID获取与验证全指南

1. 理解FlexNet Publisher Host ID的核心概念在软件许可管理领域,FlexNet Publisher(简称FNP)是业界广泛使用的许可证管理系统。当我们需要将软件许可证绑定到特定机器时,Host ID就像这台设备的"身份证号码"。对于使用A…...