news 2026/10/13 7:16:21

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);

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

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

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

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);

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

    先将要发送的消息转换为字节数组,通过NetworkStream的Write方法发送到服务器。
    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/10/12 0:16:39

小程序计算机毕设之基于微信小程序的健康生活定制应用基于django+微信小程序的健康生活系统(完整前后端代码+说明文档+LW,调试定制等)

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

作者头像 李华
网站建设 2026/10/11 15:46:58

Moxie Marlinspike推出注重隐私的ChatGPT替代方案Confer

如果你对隐私问题有所担忧,AI个人助手的兴起可能会让人感到不安。使用这些服务很难避免分享个人信息,而这些信息会被模型的母公司保留。随着OpenAI已经开始测试广告功能,很容易想象驱动Facebook和Google的数据收集模式会渗透到你的聊天机器人…

作者头像 李华
网站建设 2026/10/10 9:17:42

Panduit 数据中心布线设计实战解析

在现代数据中心架构中,网络布线是构建高性能、高可靠性系统的基础。Panduit Corp 作为业界领先的物理网络基础设施供应商,其覆盖铜缆与光缆的线束组件在数据中心布线设计中得到广泛应用。本文结合 Panduit 的铜缆与光缆布线设计实战经验,解析…

作者头像 李华
网站建设 2026/10/12 15:47:00

探索Green–Ampt入渗模型与Richards非饱和渗流

Green–Ampt入渗模型与Richards非饱和渗流,适用于各类型的均质土体入渗,包括且不限于边坡降雨入渗等 [1]模型简介:使用数值模拟软件COMSOL,以Lima试验分析使用Green-Ampt入渗模型的入渗率变化、最大入渗能力变化及土壤不同深度的压…

作者头像 李华
网站建设 2026/10/8 15:11:48

记忆力:解锁学业成就的核心引擎

我们正经历一场学习革命。当知识总量爆炸式增长,决定胜负的不再是投入时间的长度,而是记忆力的强度。记忆力,这项曾被视为“死记硬背”的底层能力,已成为连接高效学习与卓越成绩的隐形桥梁。真正的记忆力,是信息的智能…

作者头像 李华