91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

c# socket編程怎樣實現多線程

c#
小樊
85
2024-10-09 04:41:29
欄目: 編程語言

在C#中,使用Socket編程實現多線程主要涉及到兩個方面:服務器端的多線程處理客戶端連接,以及客戶端的多線程處理數據收發。下面分別介紹這兩個方面。

  1. 服務器端多線程處理客戶端連接:

服務器端需要創建一個線程池來處理客戶端的連接請求。當有新的客戶端連接時,從線程池中取出一個線程來處理該客戶端的請求。這樣可以避免為每個客戶端連接創建一個新的線程,從而提高服務器的性能。

以下是一個簡單的服務器端多線程處理客戶端連接的示例:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Collections.Generic;

class Server
{
    static void Main(string[] args)
    {
        int port = 12345;
        TcpListener server = new TcpListener(IPAddress.Any, port);
        server.Start();
        Console.WriteLine("Server started...");

        while (true)
        {
            TcpClient client = server.AcceptTcpClient();
            Console.WriteLine("New client connected.");

            // 將客戶端連接任務添加到線程池
            ThreadPool.QueueUserWorkItem(HandleClient, client);
        }
    }

    static void HandleClient(object state)
    {
        TcpClient client = (TcpClient)state;
        NetworkStream stream = client.GetStream();

        byte[] buffer = new byte[1024];
        int bytesRead;

        while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0)
        {
            string data = Encoding.ASCII.GetString(buffer, 0, bytesRead);
            Console.WriteLine("Received from client: " + data);

            // 處理客戶端數據...

            string response = "Server response";
            byte[] responseBytes = Encoding.ASCII.GetBytes(response);
            stream.Write(responseBytes, 0, responseBytes.Length);
        }

        client.Close();
        Console.WriteLine("Client disconnected.");
    }
}
  1. 客戶端多線程處理數據收發:

客戶端可以使用多線程來同時處理多個數據收發任務。例如,可以創建一個線程用于接收服務器發送的數據,另一個線程用于向服務器發送數據。

以下是一個簡單的客戶端多線程處理數據收發的示例:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

class Client
{
    static void Main(string[] args)
    {
        string serverAddress = "127.0.0.1";
        int port = 12345;

        TcpClient client = new TcpClient(serverAddress, port);
        NetworkStream stream = client.GetStream();

        // 啟動一個線程用于接收服務器數據
        Thread receiveThread = new Thread(ReceiveData);
        receiveThread.Start();

        // 發送數據到服務器...

        Console.WriteLine("Client disconnected.");
    }

    static void ReceiveData()
    {
        byte[] buffer = new byte[1024];
        int bytesRead;

        while (true)
        {
            bytesRead = stream.Read(buffer, 0, buffer.Length);
            if (bytesRead == 0)
                break;

            string data = Encoding.ASCII.GetString(buffer, 0, bytesRead);
            Console.WriteLine("Received from server: " + data);

            // 處理接收到的數據...
        }
    }
}

這個示例中,服務器端使用線程池處理客戶端連接,客戶端使用一個線程接收服務器數據。你可以根據需要調整線程的數量和處理邏輯。

0
夏邑县| 青海省| 天津市| 雷波县| 苗栗市| 高要市| 威海市| 绥中县| 连山| 普格县| 榆树市| 西昌市| 浑源县| 仪陇县| 闵行区| 越西县| 宽城| 海宁市| 惠安县| 安龙县| 板桥市| 安康市| 元阳县| 白朗县| 若尔盖县| 普宁市| 大港区| 湟中县| 三穗县| 苍山县| 平顺县| 封开县| 金寨县| 彭阳县| 高州市| 集贤县| 堆龙德庆县| 资中县| 甘南县| 天峨县| 灵寿县|