news 2026/5/9 11:34:07

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 这类设备通讯场景下的应用思路。实际应用中,可根据具体需求对代码进行扩展和优化。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 6:35:49

西门子S7200smart PLC与三菱FX3u PLC 的485 Modbus RTU通信之旅

西门子S7200smartPLC与三菱FX3uPlc做485Modbus RTU通信,西门子S7200smartPLC做主站轮训扫描读取写去数据转入三菱Plc!通信已测试没有问题,最近成功实现了西门子S7200smart PLC与三菱FX3u PLC 通过485 Modbus RTU进行通信,并且西门…

作者头像 李华
网站建设 2026/5/8 8:02:51

文件系统(理解机械磁盘)

理解硬件:磁盘1.机械磁盘机械磁盘是计算机中唯一的一个机械设备,本节提到的磁盘均为机械磁盘2.磁盘物理结构3.磁盘的存储结构一个磁盘有数个盘,每个盘有两个盘面,每个盘面上都有磁头可以进行读写,每一个盘面上都有数个…

作者头像 李华
网站建设 2026/5/2 4:12:41

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

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

作者头像 李华
网站建设 2026/5/6 9:56:49

SPV1050低功耗微功率太阳能充电管理模块原理图设计,已量产

目录 1、系统整体架构:从能量收集到负载供电 2、核心单元详解:SPV1050 微功率 MPPT 电路设计 2.1、选型逻辑:为什么是 SPV1050? 2.2、MPPT 算法:恒定电压比例的工程实现 2.3、能量转换与电池保护 2.4、3.3V 稳压输出 3、备用充电路径:TP4057 USB 线性充电电路 4、…

作者头像 李华
网站建设 2026/5/3 1:02:13

探索光伏蓄电池离网MATLAB仿真模型

光伏蓄电池离网MATLAB仿真模型 蓄电池具有储能作用(削峰填谷) 实现光伏和蓄电池的能量双向流动 维持输出电压稳定 该模型的原理说明文档 有boost结构的MPPT和BUCK型的MPPT,通常是boost型的mppt电路。在当今追求可持续能源的时代,光伏蓄电池离网系统凭借…

作者头像 李华
网站建设 2026/5/8 16:08:29

西门子PLC与昆仑通态打造稳定闭式循环水无负压真空脱气系统

西门子PLC与昆仑通态无负压真空脱气系统程序,带常压罐,适用于闭式循环水系统,运行稳定可靠。在工业领域的闭式循环水系统中,确保系统内无负压以及有效脱气是保障设备稳定运行的关键。今天就来聊聊基于西门子PLC与昆仑通态构建的无…

作者头像 李华