宜宾市网站建设_网站建设公司_留言板_seo优化
2026/1/19 22:03:57 网站建设 项目流程

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询