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

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.jsqmd.com/news/269748/

相关文章:

  • 2026大专计算机专业学数据分析的价值分析
  • PySide系列-07-QMainWindow
  • 【计算机毕业设计案例】基于微信小程序的考研资源共享平台的设计与实现基于django+微信小程序的考研信息查询系统(程序+文档+讲解+定制)
  • c++中的常用栈操作
  • 2026/1/17-Atcoder Beginner Contest 441 T1~4
  • 群友靶机lara复现 - 场
  • 小程序毕设选题推荐:基于django+微信小程序的健康生活系统个人健康生活平台小程序【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 信件分析(2)
  • 探索人脸识别追踪:从图像采集到电机驱动的奇妙旅程
  • ​​​​​​​推荐10个数据备份与恢复工具?先搞懂这3种备份方式,再选才不踩坑!
  • 手把手教你降AI不伤文:保姆级操作让论文既通过检测又保持专业
  • FPGA 实现多路高精度 AD1246 高速数据采集与接收设计
  • ACPI!gReadyQueue中的plistCtxtQ和ACPI!GetOpRegionScopeWorker函数中的赋值*state->PciObj = state->Parent
  • 2026年8款免费降AI率工具实测推荐,毕业党必看
  • 微分方程一维抛物热传导方程数值解法全解析
  • 《实时渲染》第2章-图形渲染管线-2.2应用程序阶段
  • 深度解析2026论文优化方案:从DeepSeek到学术猹,谁是NLP降重的最优解? - 品牌观察员小捷
  • Comsol 中浆液扩散模型:注浆过程的数字化洞察
  • 2026降AI工具红黑榜:实测8款后我只推荐这3个
  • 打造学生信息管理系统:从构思到实现
  • 2026中专生考大数据与财务管理专业学习指南
  • 知网AIGC检测不通过?2026最新降AI攻略来了
  • 小程序毕设项目推荐-基于django+微信小程序的考研信息查询系统考研院校推荐系统 考研分数线发布查询【附源码+文档,调试定制服务】
  • ArcGIS大师之路500技---062调整面要素到指定面积
  • 知网AIGC检测不通过?学长亲测的避坑指南
  • 交变磁场下含感应材料沥青路面温度:奇妙的物理与技术融合
  • Xilinx FPGA实现延时链
  • 聊聊神奇的连续拉丝机自动控制程序
  • 探索直流有感无刷电机驱动器:功能与特色深度剖析
  • 整车性能仿真:Cruise与Matlab联合的五年经验分享