Hochleistungs-TCP-Server in C#

Muhammad Zeeshan 12 Oktober 2023
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.

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..
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.

LinkedIn