C# 中的超简单 TCP 通讯包:一步步带你玩转

网络 网络管理
通过以上的步骤,你已经成功实现了一个简单的 TCP 通讯包。服务器会监听一个端口,等待客户端的连接,并在接收到消息后返回响应。客户端会连接到服务器,发送消息,并接收服务器的响应。

嘿,各位开发者朋友们!今天咱们来聊聊 C# 中的 TCP 通讯。TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在很多应用场景中,我们需要通过 TCP 来实现客户端和服务器之间的数据传输。别担心,即使你是 TCP 通讯的新手,我也会用最简单、最口语化的方式,带你一步步实现一个基本的 TCP 通讯包。

一、准备工作

在开始之前,请确保你的开发环境已经安装好了 Visual Studio(或其他支持 C# 的 IDE),并且已经创建了一个新的 C# 控制台项目。

二、创建服务器

首先,我们来实现一个简单的 TCP 服务器。这个服务器会监听一个特定的端口,等待客户端的连接,并在接收到消息后返回一条响应。

  • 添加必要的命名空间在你的服务器代码文件的顶部,添加以下命名空间:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
  • 实现服务器逻辑接下来,我们在 Main 方法中编写服务器的代码:
class Program
{
    static void Main(string[] args)
    {
        // 定义一个IP地址和端口号
        IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
        int port = 11000;

        // 创建TCP监听器
        TcpListener listener = new TcpListener(ipAddress, port);

        try
        {
            // 启动监听
            listener.Start();
            Console.WriteLine("服务器已启动,等待连接...");

            while (true)
            {
                // 接受客户端连接
                TcpClient client = listener.AcceptTcpClient();
                Console.WriteLine("客户端已连接!");

                // 获取网络流
                NetworkStream stream = client.GetStream();

                // 读取客户端发送的数据
                byte[] buffer = new byte[256];
                int bytesRead = stream.Read(buffer, 0, buffer.Length);
                string receivedData = Encoding.ASCII.GetString(buffer, 0, bytesRead);
                Console.WriteLine($"收到消息: {receivedData}");

                // 发送响应消息
                byte[] response = Encoding.ASCII.GetBytes("消息已收到!");
                stream.Write(response, 0, response.Length);

                // 关闭连接
                client.Close();
            }
        }
        catch (SocketException e)
        {
            Console.WriteLine($"SocketException: {e}");
        }
        finally
        {
            // 停止监听
            listener.Stop();
        }

        Console.WriteLine("\n按任意键退出...");
        Console.ReadKey();
    }
}

三、创建客户端

接下来,我们来实现一个简单的 TCP 客户端。这个客户端会连接到服务器,发送一条消息,并接收服务器的响应。

  • 添加必要的命名空间在你的客户端代码文件的顶部,添加以下命名空间:
using System;
using System.Net.Sockets;
using System.Text;
  • 实现客户端逻辑接下来,我们在 Main 方法中编写客户端的代码:
class Program
{
    static void Main(string[] args)
    {
        // 定义一个服务器IP地址和端口号
        string server = "127.0.0.1";
        int port = 11000;

        try
        {
            // 创建TCP客户端
            TcpClient client = new TcpClient(server, port);
            Console.WriteLine("已连接到服务器!");

            // 获取网络流
            NetworkStream stream = client.GetStream();

            // 发送消息到服务器
            string message = "你好,服务器!";
            byte[] data = Encoding.ASCII.GetBytes(message);
            stream.Write(data, 0, data.Length);
            Console.WriteLine($"发送消息: {message}");

            // 接收服务器的响应
            byte[] buffer = new byte[256];
            int bytesRead = stream.Read(buffer, 0, buffer.Length);
            string responseData = Encoding.ASCII.GetString(buffer, 0, bytesRead);
            Console.WriteLine($"收到响应: {responseData}");

            // 关闭连接
            stream.Close();
            client.Close();
        }
        catch (ArgumentNullException e)
        {
            Console.WriteLine($"ArgumentNullException: {e.Message}");
        }
        catch (SocketException e)
        {
            Console.WriteLine($"SocketException: {e.Message}");
        }

        Console.WriteLine("\n按任意键退出...");
        Console.ReadKey();
    }
}

四、运行测试

现在,你已经完成了服务器和客户端的代码。接下来,咱们来运行一下,看看效果。

  • 运行服务器首先,运行你的服务器代码。你会看到控制台输出“服务器已启动,等待连接...”。
  • 运行客户端然后,运行你的客户端代码。你会看到控制台输出“已连接到服务器!”,发送的消息,以及从服务器接收到的响应。
  • 观察结果在服务器端,你会看到控制台输出“客户端已连接!”和“收到消息: 你好,服务器!”。

五、总结

通过以上的步骤,你已经成功实现了一个简单的 TCP 通讯包。服务器会监听一个端口,等待客户端的连接,并在接收到消息后返回响应。客户端会连接到服务器,发送消息,并接收服务器的响应。

这只是一个基本的实现,你可以在此基础上进行扩展和优化,比如增加多线程支持、异常处理、数据格式处理等。希望这篇文章对你有所帮助,祝你编程愉快!

责任编辑:武晓燕 来源: 程序员编程日记
相关推荐

2017-01-19 21:08:33

iOS路由构建

2024-11-18 17:12:18

C#编程.NET

2009-04-15 09:29:07

2019-03-05 14:09:27

Docker存储容器

2019-07-09 15:23:22

Docker存储驱动

2010-08-12 10:02:16

路由器NAT

2018-12-24 10:04:06

Docker存储驱动

2010-03-04 16:28:17

Android核心代码

2016-11-02 18:54:01

javascript

2017-12-25 11:50:57

LinuxArch Linux

2024-08-30 08:30:29

CPU操作系统寄存器

2024-09-30 09:56:59

2011-05-10 10:28:55

2020-12-24 11:19:55

JavaMapHashMap

2018-06-11 15:30:12

2018-04-23 14:23:12

2019-04-01 10:15:02

2018-07-13 15:36:52

2024-08-06 09:29:54

程序机器指令字符串

2021-10-29 23:00:47

Windows 11Windows微软
点赞
收藏

51CTO技术栈公众号