1 Pluspunkt 0 Minuspunkte

Ich habe diesen Code für einen TCP Listener. Das Problem ist wenn ich mich verbinde kann sich kein zweiter Client verbinden bis der erste oder alle vorigen die Verbindung geschlossen haben. Wie kann ich machen das mehrere Clients gleichzeitig verarbeitet werden können?

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

class Program
{
    static void Main()
    {
        TcpListener server = null;
        try
        {

            IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
            int port = 8080;

            server = new TcpListener(ipAddress, port);
            server.Start();

            Console.WriteLine("Server gestartet...");

            while (true)
            {

                TcpClient client = server.AcceptTcpClient();
                Console.WriteLine("Verbindung hergestellt!");

                HandleClient(client);

            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Fehler: " + e);
        }
        finally
        {

            server.Stop();
        }
    }

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

        string response = "Hallo, Client!";
        byte[] responseData = Encoding.ASCII.GetBytes(response);
        stream.Write(responseData, 0, responseData.Length);
        stream.Flush();
        
        byte[] buffer = new byte[256];
        int bytesRead = stream.Read(buffer, 0, buffer.Length);
        string data = Encoding.ASCII.GetString(buffer, 0, bytesRead);
        Console.WriteLine("Empfangene Nachricht:" + data);

        stream.Close();
        client.Close();
    }
}

von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Du kannst jede Verbindung in einem separaten Thread behandeln. Das würde bedeuten, dass der Server in der Lage ist, mehrere Verbindungen gleichzeitig zu akzeptieren und parallel zu bearbeiten.

while (true)
{
    TcpClient client = server.AcceptTcpClient();

    // Verarbeitung der Client-Anforderung in einem separaten Thread
    new System.Threading.Thread(() => HandleClient(client)).Start();
}

von (410 Punkte)