Tuesday, June 17, 2014

C# - Server / Client


Heute möchte ich euch kurz die Kommunikation zwischen zwei Computern über TCP/IP vorstellen.
Wir werden in diesem Beispiel einen Client und einen Server verwenden.
Der Server ist aber so aufgebaut, dass er mehrere Clients gleichzeitig bearbeiten kann.


Beginnen wir mit dem Aufbau des Servers.

Server Programm:


Wir erstellen eine neue Consolen Anwendung.



Als erstes erstellen wir eine Funktion StartServer();



Start Server












Da der Server auf die locale (eigene) IP Adresse hören soll, habe ich dafür eine eigene Funktion erstellt.



















In der Funktion StartServer() erstellen wir einen neuen TcpListener und rufen die Funktion WaitForClientConnect() auf.


In WaitForClientConnect() bearbeiten wir alle eingehenden Verbindungen zu dem Server.
Dazu erstellen wir für jeden neuen Client einen eigenen Thread.
Dies dient dazu, wenn der Verbindungsaufbau zu Server länger dauert, die restliche Funktionalität nicht beeinflusst wird.























In OnClientConnect() erstellen wir ein neues Objekt TcpClient vom eingehenden Client und übergeben das der Klasse HandleClientRequest.

Anschließend starten wir die Kommunikation mit dem Client, clientReq.StartClient();



In der Klasse HandleClientRequest schaut das Initialisieren folgendermaßen aus:














Es wird der TcpClient verwendet welcher im Hauptprogramm erstellt wurde.
Die StartClient() Funktion ließt die Nachrichten vom Client und geht dann wieder in einen „Warte-Modus“ für neue Nachrichten.


Jetzt fehlt noch die Nachrichtenverarbeitung, die wie folgt aussieht.


































In WaitForRequest() beginnen wir mit dem Lesen der Nachricht und verwenden dabei die asynchrone Funktion ReadCallback.
Die Funktion ReadCallback sendet anschließen auch eine Nachricht zurück an den Client.

Zum Schluss müssen wir den Server noch einsatzbereit machen indem wir die StartServer() Funktion aufrufen.









Client Programm:


Wir erstellen wieder eine Consolen Anwendung.

Wir erstellen zuerst einen neue Klasse TCPClient.
Die Klasse enthält folgenden Funktionen:
  • ConnectToServer
  • ClosConnection
  •  SendData
  • ReceiveData




Funktion ConnectToServer:













Hier erstellen wir ein TCP Objekt welches zum Server zeigt.
Server IP durch die IP Adresse vom Server ersetzen.



Funktion CloseConnection:






Hier wird die aktuelle Verbindung geschlossen.



Funktion SendData:












Es wird die zu sendende Nachricht in ein byte Array umgewandelt und anschließend an den Server gesendet. (Auf Server Seite endet dieser Aufruf in der ReadCallback Funktion)



Funktion ReceiveData:



























Diese Funktion kann nach dem SendData aufgerufen werden um die Antwort vom Server zu empfangen.
Die Antwort wird von einem byte Array wieder in einen String umgewandelt.



Ein kompletter Aufruf würde dann wie folgt aussehen:


No comments:

Post a Comment