HOWTO · Csharp

Hochleistungs-TCP-Server in C#

Im folgenden Artikel erfahren Sie, wie Sie mit der Programmiersprache C# einen TCP-Server erstellen, der über eine hervorragende Leistung verfügt, skalierbar ist und viele Verbindungen verwalten kann.

Auf dieser Seite

Im folgenden Artikel erfahren Sie, wie Sie mit der Programmiersprache C# einen TCP-Server erstellen, der über eine hervorragende Leistung verfügt, skalierbar ist und viele Verbindungen verwalten kann.

Hochleistungs-TCP-Server in C#

Ein als Asynchronous TCP-Server bezeichneter Ansatz ermöglicht es, mehrere Clients gleichzeitig zu verbinden, wobei jeder Client auf seinem eigenen Thread arbeitet. All dies wird mit einem relativ kurzen und unkomplizierten Code erreicht, den Sie im Kopf behalten müssen.

Beispiel:

Importieren Sie zunächst die folgenden Bibliotheken:

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

Zuerst erstellen wir ein Objekt von TcpListener und geben ihm den Namen Tcpserver.

TcpListener Tcpserver = new TcpListener(IPAddress.Any, 9999);

Um nun eine Verbindung von einem Client zum Server zu akzeptieren, müssen wir eine Methode namens StartOperations() erstellen. Diese Methode wird mit dem BeginAcceptTcpClient aufgerufen.

public void StartOperations() {
  Tcpserver.Start();
  Console.WriteLine("The Current Server is : 9999");
  Console.WriteLine("The local End point :" + Tcpserver.LocalEndpoint);
  Console.WriteLine("Waiting for a connection request..");
  Tcpserver.BeginAcceptTcpClient(ServerClientCommunication, Tcpserver);
}

Wir senden die Funktion ServerClientCommunication() an die Funktion BeginAcceptTcpClient, die auf einem separaten Thread aus dem Threadpool ausgeführt wird. Dies erspart Ihnen die Notwendigkeit, Threads manuell zu erstellen.

Tcpserver.BeginAcceptTcpClient(ServerClientCommunication, Tcpserver);

Die Funktion ServerClientCommunication() erhält ein Argument IAsyncResult, und dieses Argument ist dafür verantwortlich, dass die Verbindung aktiv bleibt. Diese Methode ruft dann wiederholt StartOperations() auf, wodurch das Programm kontinuierlich zwischen mehreren Threads wechselt.

public void ServerClientCommunication(IAsyncResult res) {
  s TcpClient tcpClient = Tcpserver.EndAcceptTcpClient(res);
  NetworkStream ns = tcpClient.GetStream();
  Console.WriteLine("Here Write your Logic");
}

Darüber hinaus können Sie in der Funktion ServerClientCommunication() die Logik oder den Code angeben, die Sie ausführen möchten.

Vollständiger Quellcode:

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

namespace tcpServerbyZeeshan {
  class Program {
    static void Main(string[] args) {
      Program sample = new Program();
      sample.StartOperations();
      Console.ReadLine();
    }

    TcpListener Tcpserver = new TcpListener(IPAddress.Any, 9999);
    public void StartOperations() {
      Tcpserver.Start();
      Console.WriteLine("The Current Server is : 9999");
      Console.WriteLine("The local End point :" + Tcpserver.LocalEndpoint);
      Console.WriteLine("Waiting for a connection request..");
      Tcpserver.BeginAcceptTcpClient(ServerClientCommunication, Tcpserver);
    }

    public void ServerClientCommunication(IAsyncResult res) {
      TcpClient tcpClient = Tcpserver.EndAcceptTcpClient(res);
      NetworkStream ns = tcpClient.GetStream();
      Console.WriteLine("Here Write your Logic");
    }
  }
}

Ausgang:

The Current Server is : 9999
The local End point :0.0.0.0:9999
Waiting for a connection request..