lima-city: Webhosting, Domains und Cloud
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 (486 Punkte)  
Diese Community basiert auf dem Prinzip der Selbstregulierung. Beiträge werden von Nutzern erstellt, bewertet und verbessert – ganz ohne zentrale Moderation.

Wer hilfreiche Fragen stellt oder gute Antworten gibt, sammelt Punkte. Mit steigender Punktzahl erhalten Mitglieder automatisch mehr Rechte, zum Beispiel

  • Kommentare verfassen
  • Beiträge bewerten
  • Inhalte bearbeiten
  • Inhalte ausblenden

So entsteht eine Plattform, auf der sich Qualität durchsetzt – getragen von einer engagierten Gemeinschaft. Unser Ziel: Guter Inhalt. Für alle.

2.3k Fragen

2.8k Antworten

260 Kommentare

12 Nutzer