C# 中的超簡(jiǎn)單 TCP 通訊包:一步步帶你玩轉(zhuǎn)
嘿,各位開發(fā)者朋友們!今天咱們來聊聊 C# 中的 TCP 通訊。TCP(Transmission Control Protocol,傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。在很多應(yīng)用場(chǎng)景中,我們需要通過 TCP 來實(shí)現(xiàn)客戶端和服務(wù)器之間的數(shù)據(jù)傳輸。別擔(dān)心,即使你是 TCP 通訊的新手,我也會(huì)用最簡(jiǎn)單、最口語化的方式,帶你一步步實(shí)現(xiàn)一個(gè)基本的 TCP 通訊包。
一、準(zhǔn)備工作
在開始之前,請(qǐng)確保你的開發(fā)環(huán)境已經(jīng)安裝好了 Visual Studio(或其他支持 C# 的 IDE),并且已經(jīng)創(chuàng)建了一個(gè)新的 C# 控制臺(tái)項(xiàng)目。
二、創(chuàng)建服務(wù)器
首先,我們來實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 TCP 服務(wù)器。這個(gè)服務(wù)器會(huì)監(jiān)聽一個(gè)特定的端口,等待客戶端的連接,并在接收到消息后返回一條響應(yīng)。
- 添加必要的命名空間在你的服務(wù)器代碼文件的頂部,添加以下命名空間:
 
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;- 實(shí)現(xiàn)服務(wù)器邏輯接下來,我們?cè)?Main 方法中編寫服務(wù)器的代碼:
 
class Program
{
    static void Main(string[] args)
    {
        // 定義一個(gè)IP地址和端口號(hào)
        IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
        int port = 11000;
        // 創(chuàng)建TCP監(jiān)聽器
        TcpListener listener = new TcpListener(ipAddress, port);
        try
        {
            // 啟動(dòng)監(jiān)聽
            listener.Start();
            Console.WriteLine("服務(wù)器已啟動(dòng),等待連接...");
            while (true)
            {
                // 接受客戶端連接
                TcpClient client = listener.AcceptTcpClient();
                Console.WriteLine("客戶端已連接!");
                // 獲取網(wǎng)絡(luò)流
                NetworkStream stream = client.GetStream();
                // 讀取客戶端發(fā)送的數(shù)據(jù)
                byte[] buffer = new byte[256];
                int bytesRead = stream.Read(buffer, 0, buffer.Length);
                string receivedData = Encoding.ASCII.GetString(buffer, 0, bytesRead);
                Console.WriteLine($"收到消息: {receivedData}");
                // 發(fā)送響應(yīng)消息
                byte[] response = Encoding.ASCII.GetBytes("消息已收到!");
                stream.Write(response, 0, response.Length);
                // 關(guān)閉連接
                client.Close();
            }
        }
        catch (SocketException e)
        {
            Console.WriteLine($"SocketException: {e}");
        }
        finally
        {
            // 停止監(jiān)聽
            listener.Stop();
        }
        Console.WriteLine("\n按任意鍵退出...");
        Console.ReadKey();
    }
}三、創(chuàng)建客戶端
接下來,我們來實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 TCP 客戶端。這個(gè)客戶端會(huì)連接到服務(wù)器,發(fā)送一條消息,并接收服務(wù)器的響應(yīng)。
- 添加必要的命名空間在你的客戶端代碼文件的頂部,添加以下命名空間:
 
using System;
using System.Net.Sockets;
using System.Text;- 實(shí)現(xiàn)客戶端邏輯接下來,我們?cè)?Main 方法中編寫客戶端的代碼:
 
class Program
{
    static void Main(string[] args)
    {
        // 定義一個(gè)服務(wù)器IP地址和端口號(hào)
        string server = "127.0.0.1";
        int port = 11000;
        try
        {
            // 創(chuàng)建TCP客戶端
            TcpClient client = new TcpClient(server, port);
            Console.WriteLine("已連接到服務(wù)器!");
            // 獲取網(wǎng)絡(luò)流
            NetworkStream stream = client.GetStream();
            // 發(fā)送消息到服務(wù)器
            string message = "你好,服務(wù)器!";
            byte[] data = Encoding.ASCII.GetBytes(message);
            stream.Write(data, 0, data.Length);
            Console.WriteLine($"發(fā)送消息: {message}");
            // 接收服務(wù)器的響應(yīng)
            byte[] buffer = new byte[256];
            int bytesRead = stream.Read(buffer, 0, buffer.Length);
            string responseData = Encoding.ASCII.GetString(buffer, 0, bytesRead);
            Console.WriteLine($"收到響應(yīng): {responseData}");
            // 關(guān)閉連接
            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();
    }
}四、運(yùn)行測(cè)試
現(xiàn)在,你已經(jīng)完成了服務(wù)器和客戶端的代碼。接下來,咱們來運(yùn)行一下,看看效果。
- 運(yùn)行服務(wù)器首先,運(yùn)行你的服務(wù)器代碼。你會(huì)看到控制臺(tái)輸出“服務(wù)器已啟動(dòng),等待連接...”。
 - 運(yùn)行客戶端然后,運(yùn)行你的客戶端代碼。你會(huì)看到控制臺(tái)輸出“已連接到服務(wù)器!”,發(fā)送的消息,以及從服務(wù)器接收到的響應(yīng)。
 - 觀察結(jié)果在服務(wù)器端,你會(huì)看到控制臺(tái)輸出“客戶端已連接!”和“收到消息: 你好,服務(wù)器!”。
 
五、總結(jié)
通過以上的步驟,你已經(jīng)成功實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的 TCP 通訊包。服務(wù)器會(huì)監(jiān)聽一個(gè)端口,等待客戶端的連接,并在接收到消息后返回響應(yīng)。客戶端會(huì)連接到服務(wù)器,發(fā)送消息,并接收服務(wù)器的響應(yīng)。
這只是一個(gè)基本的實(shí)現(xiàn),你可以在此基礎(chǔ)上進(jìn)行擴(kuò)展和優(yōu)化,比如增加多線程支持、異常處理、數(shù)據(jù)格式處理等。希望這篇文章對(duì)你有所幫助,祝你編程愉快!















 
 
 








 
 
 
 