C# 实现 TCP/IP 客户端与服务器数据交互及与西门子 S7 - 200Smart 通讯

C# TCP IP 客户端和服务器工程源码,带注释,里面含有以字节、字、浮点型数据、字符串数据进行数据交互的客户端与服务器源码,可实现中英文字符串实现聊天,本图为与西门子S7-200Smart通讯为例

在 C# 的编程世界里,实现 TCP/IP 客户端与服务器之间的数据交互是一项常见且实用的技能。同时,与西门子 S7 - 200Smart 这类工业设备通讯也有着广泛的应用场景。今天就来分享一套相关的工程源码,并对其中关键部分进行分析。

一、项目基础概述

这个项目主要实现了 TCP/IP 客户端和服务器之间以字节、字、浮点型数据以及字符串数据进行交互。而且特别之处在于,还支持中英文字符串聊天功能,我们以与西门子 S7 - 200Smart 通讯为例展开。

二、服务器端代码示例及分析

using System; using System.Net; using System.Net.Sockets; using System.Text; class TcpServer { private const int BufferSize = 1024; private TcpListener _tcpListener; private TcpClient _client; public TcpServer() { // 初始化TcpListener,监听本地IP的13000端口 _tcpListener = new TcpListener(IPAddress.Any, 13000); _tcpListener.Start(); Console.WriteLine("服务器已启动,等待客户端连接..."); } public void StartListening() { // 等待客户端连接 _client = _tcpListener.AcceptTcpClient(); Console.WriteLine("客户端已连接"); NetworkStream stream = _client.GetStream(); byte[] buffer = new byte[BufferSize]; while (true) { // 从客户端读取数据 int bytesRead = stream.Read(buffer, 0, BufferSize); if (bytesRead == 0) break; string receivedMessage = Encoding.UTF8.GetString(buffer, 0, bytesRead); Console.WriteLine($"接收到客户端消息: {receivedMessage}"); // 这里简单回复一个字符串给客户端 string responseMessage = "服务器已收到消息"; byte[] responseBuffer = Encoding.UTF8.GetBytes(responseMessage); stream.Write(responseBuffer, 0, responseBuffer.Length); } stream.Close(); _client.Close(); _tcpListener.Stop(); } }

代码分析

  1. 初始化 TcpListener
    csharp
    tcpListener = new TcpListener(IPAddress.Any, 13000);
    tcpListener.Start();

    这部分代码创建了一个TcpListener对象,绑定到本地所有 IP 地址(IPAddress.Any)的 13000 端口,并启动监听。
  2. 接受客户端连接
    csharp
    client =tcpListener.AcceptTcpClient();

    AcceptTcpClient方法会阻塞当前线程,直到有客户端连接到服务器。一旦有客户端连接,就返回一个TcpClient对象用于与该客户端进行通信。
  3. 数据读取与处理
    csharp
    int bytesRead = stream.Read(buffer, 0, BufferSize);
    string receivedMessage = Encoding.UTF8.GetString(buffer, 0, bytesRead);

    使用NetworkStreamRead方法从客户端读取数据到缓冲区buffer中,然后根据读取的字节数,使用Encoding.UTF8.GetString将字节数组转换为字符串,得到客户端发送的消息。
  4. 数据回复
    csharp
    string responseMessage = "服务器已收到消息";
    byte[] responseBuffer = Encoding.UTF8.GetBytes(responseMessage);
    stream.Write(responseBuffer, 0, responseBuffer.Length);

    构造一个回复消息,将其转换为字节数组后,通过NetworkStreamWrite方法发送回客户端。

三、客户端代码示例及分析

using System; using System.Net.Sockets; using System.Text; class TcpClientApp { private const string ServerIp = "127.0.0.1"; private const int ServerPort = 13000; private TcpClient _tcpClient; public TcpClientApp() { // 尝试连接到服务器 _tcpClient = new TcpClient(); try { _tcpClient.Connect(IPAddress.Parse(ServerIp), ServerPort); Console.WriteLine("已连接到服务器"); } catch (SocketException e) { Console.WriteLine($"连接服务器失败: {e.Message}"); return; } } public void SendMessage(string message) { NetworkStream stream = _tcpClient.GetStream(); byte[] buffer = Encoding.UTF8.GetBytes(message); stream.Write(buffer, 0, buffer.Length); byte[] responseBuffer = new byte[1024]; int bytesRead = stream.Read(responseBuffer, 0, responseBuffer.Length); string responseMessage = Encoding.UTF8.GetString(responseBuffer, 0, bytesRead); Console.WriteLine($"服务器回复: {responseMessage}"); } public void CloseConnection() { _tcpClient.Close(); } }

代码分析

  1. 连接服务器
    csharp
    _tcpClient.Connect(IPAddress.Parse(ServerIp), ServerPort);

    使用TcpClientConnect方法尝试连接到指定 IP 地址(这里是本地回环地址127.0.0.1)和端口(13000)的服务器。如果连接失败,捕获SocketException并输出错误信息。
  2. 发送消息与接收回复
    csharp
    byte[] buffer = Encoding.UTF8.GetBytes(message);
    stream.Write(buffer, 0, buffer.Length);

    先将要发送的消息转换为字节数组,通过NetworkStreamWrite方法发送到服务器。
    csharp
    int bytesRead = stream.Read(responseBuffer, 0, responseBuffer.Length);
    string responseMessage = Encoding.UTF8.GetString(responseBuffer, 0, bytesRead);

    然后从服务器读取回复数据到responseBuffer缓冲区,再将字节数组转换为字符串,得到服务器的回复消息。
  3. 关闭连接
    csharp
    _tcpClient.Close();

    使用Close方法关闭与服务器的连接。

四、与西门子 S7 - 200Smart 通讯相关要点

与西门子 S7 - 200Smart 通讯时,通常需要遵循其特定的协议。比如可能涉及到 PPI 协议等。在实际项目中,可能需要在上述 TCP/IP 通讯的基础上,进一步封装与西门子设备交互的逻辑。例如,构建符合西门子协议的数据帧,发送数据帧并解析返回的数据。这部分逻辑可能会根据具体的通讯需求和设备配置有所不同。

C# TCP IP 客户端和服务器工程源码,带注释,里面含有以字节、字、浮点型数据、字符串数据进行数据交互的客户端与服务器源码,可实现中英文字符串实现聊天,本图为与西门子S7-200Smart通讯为例

希望通过这些代码示例和分析,能帮助大家更好地理解 C# 中 TCP/IP 客户端与服务器的数据交互,以及在与西门子 S7 - 200Smart 这类设备通讯场景下的应用思路。实际应用中,可根据具体需求对代码进行扩展和优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1185362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day23-20260119

本文介绍了Java数组的基本概念和使用方法。数组是相同类型数据的有序集合,通过索引访问元素。主要内容包括:数组的声明和创建(使用new操作符)、内存分析(堆、栈、方法区)、三种初始化方式(静态、动态和默认初始…

【计算机毕业设计案例】基于微信小程序的考研资源共享平台的设计与实现基于django+微信小程序的考研信息查询系统(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

c++中的常用栈操作

核心代码如下: include include include using namespace std; int main() { stack st; //1.入栈 st.push(A); st.puch(B); st.push(C); cout<<"栈的大小:"<<st.size()<<endl;//2.访问栈…

PySide系列-07-QMainWindow

PySide step by step系列 1、QMainWindow QMainWindow 是一个继承自 QWidget 的类&#xff0c;专门设计用来作为主应用程序窗口。它内置了多个标准的 GUI 组件区域&#xff0c;方便开发人员快速搭建界面。 QMainWindow 提供了以下几个核心区域&#xff08;布局区域&#xff…

2026/1/17-Atcoder Beginner Contest 441 T1~4

前言 比赛的时候只写了A~E后面结束后补,比赛链接:Atcoder 441 致力于把题目用通俗的语言翻译出来,让新人也能看懂A 只要X Y范围在 (P,Q) 和 (P+99,Q+99)范围之间就成立 B 只要分成两个集合A,B 字符串中每一个字符都去…

群友靶机lara复现 - 场

lara靶机lara nmap -p- 192.168.10.13 Starting Nmap 7.95 ( https://nmap.org ) at 2026-01-18 07:21 EST Nmap scan report for lara (192.168.10.13) Host is up (0.00085s latency). N…

小程序毕设选题推荐:基于django+微信小程序的健康生活系统个人健康生活平台小程序【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

信件分析(2)

学习构建北京市政百姓信件分析实战案例,完成 (1) 采集北京市政百姓信件内容; (2) 编写 MapReduce 程序清洗信件内容数据; (3) 利用 HiveSql 语句离线分析信件内容数据; (4) 利用 Sqoop 导出 Hive 分析数据…

探索人脸识别追踪:从图像采集到电机驱动的奇妙旅程

人脸识别追踪。 图像采集识别和电机驱动系统&#xff0c;利用openmv图像识别对人脸进行实时采集&#xff0c;采集信号传入到单片机&#xff0c;根据分析结果利用matlab-PID算法控制电机系统跟随人脸运动&#xff0c;自动检测追踪在科技飞速发展的当下&#xff0c;人脸识别追踪技…

​​​​​​​推荐10个数据备份与恢复工具?先搞懂这3种备份方式,再选才不踩坑!

在中小企业或个人用户的数据管理实践中&#xff0c;“备份”常被当作最后一道防线。但很多人装了工具、设了任务&#xff0c;真到需要恢复时却发现&#xff1a;要么文件没同步&#xff0c;要么版本不对&#xff0c;甚至整个备份链已损坏。问题往往不在工具本身&#xff0c;而在…

ACPI!gReadyQueue中的plistCtxtQ和ACPI!GetOpRegionScopeWorker函数中的赋值*state->PciObj = state->Parent

ACPI!gReadyQueue中的plistCtxtQ和ACPI!GetOpRegionScopeWorker函数中的赋值*state->PciObj state->Parent1: kd> g Breakpoint 3 hit eax00000800 ebx00000000 ecx89d7f270 edx89db4e50 esi89db3410 edi00000800 eipf740d4fa espf791ac5c ebpf791ac68 iopl0 …

FPGA 实现多路高精度 AD1246 高速数据采集与接收设计

FPGA高速数据接收设计&#xff0c;多路高精度AD1246数据采集在当今数字化时代&#xff0c;对于高速、高精度的数据采集需求日益增长。FPGA&#xff08;现场可编程门阵列&#xff09;以其灵活的可编程性和强大的并行处理能力&#xff0c;成为实现高速数据采集系统的理想选择。本…

手把手教你降AI不伤文:保姆级操作让论文既通过检测又保持专业

手把手教你降AI不伤文&#xff1a;保姆级操作让论文既通过检测又保持专业 TL;DR&#xff1a;降AI率最怕的就是把专业术语改没了、论文变得不伦不类。本文教你如何实现「降AI不伤文」&#xff1a;选对工具&#xff08;推荐嘎嘎降AI&#xff09;、分段处理、处理后校对。掌握这套…

微分方程一维抛物热传导方程数值解法全解析

微分方程一维抛物热传导方程向前向后欧拉C-N格式二阶BDF格式MATLAB源码 显式欧拉&#xff0c;隐式欧拉&#xff0c;梯形公式&#xff0c;改进欧拉 五点差分&#xff0c;九点差分 差分格式&#xff0c;紧差分格式 直拍&#xff0c;只有pdf版方法说明 word版 公式纯手打 数值例子…

《实时渲染》第2章-图形渲染管线-2.2应用程序阶段

应用程序阶段由CPU主导,负责处理输入、碰撞检测、剔除等任务,并将渲染图元传递给后续图形管线阶段,部分工作也可通过GPU计算着色器加速。实时渲染 2. 图形渲染管线 2.2 应用程序阶段 开发人员可以完全控制应用程序阶…

2026年8款免费降AI率工具实测推荐,毕业党必看

2026年8款免费降AI率工具实测推荐&#xff0c;毕业党必看 TL;DR&#xff1a;2026年高校AIGC检测全面升级&#xff0c;传统降重方法已失效。实测8款降AI工具后&#xff0c;推荐嘎嘎降AI&#xff08;达标率99.26%&#xff0c;性价比最高&#xff09;、比话降AI&#xff08;知网AI…

深度解析2026论文优化方案:从DeepSeek到学术猹,谁是NLP降重的最优解? - 品牌观察员小捷

在AIGC全面渗透学术界的2026年,论文检测系统(如Turnitin、CNKI)的算法已从传统的字符串匹配升级为基于困惑度(Perplexity)和突发性(Burstiness)的深度语义检测。这意味着,简单的同义词替换已失效,我们需要更高…

打造学生信息管理系统:从构思到实现

简单学生信息管理系统&#xff08;附源码&#xff09;&#xff0c;原生无边框winformsqlite&#xff0c;主要运用窗体继承动态导航菜单反射创建窗体对象家事件刷新数据&#xff0c;自定义4种类型弹窗类型对话框&#xff0c;数据分层&#xff0c;增删查改都实现了&#xff0c;其…

2026降AI工具红黑榜:实测8款后我只推荐这3个

2026降AI工具红黑榜&#xff1a;实测8款后我只推荐这3个 TL;DR&#xff1a;测了8款降AI工具&#xff0c;踩了不少坑。红榜推荐&#xff1a;嘎嘎降AI&#xff08;达标率99.26%&#xff0c;性价比最高&#xff09;、比话降AI&#xff08;不达标全额退款&#xff09;、AIGCleaner&…

Comsol 中浆液扩散模型:注浆过程的数字化洞察

comsol注浆&#xff0c;浆液扩散模型在岩土工程、建筑施工等诸多领域&#xff0c;注浆是一项关键技术&#xff0c;它能有效改善土体性质、增强结构稳定性。而理解浆液在地下的扩散规律至关重要&#xff0c;借助 Comsol 建立浆液扩散模型&#xff0c;可让我们在虚拟环境中深入探…