Einfache Socketprogrammierung

Client.cs
mit TCPClient
Server.cs
mit TCPListener

Ziel: bischlauch-Implementierung mit C#

Es gibt die zwei Quellen Socket und Standardeingabe, und auf beiden kommen Daten an.

In C/Unix gibt es die select(2) bzw. die poll(2) Systemaufrufe, die solange blockieren, bis Daten an einer Quelle verfübar sind.
Vor der Einfürung dieses Aufrufes hat man nicht blockierend gelesen, allerdings musste nach jedem Versuch gewartet werden, um die dauernde CPU-Belastung zu vermeiden. Daher war der select(2)-Aufruf eine gute Innovation, dass der Prozess/Thread solange blockiert ist, bis ein Ereignis ansteht.

In ACE gibt es genau zu diesem Zweck das Reactor-Pattern

Wie kann nun dies in C# realisiert werden ?

Multithreading

Die Idee ist naheliegend, das Thread für eine Quelle zuständg ist. Der Witz an Threads ist bekanntlich, dass sie billig sind und man so Nebenläufigkeiten ausnutzen kann.

MultiThreadedServer.cs
stand alone Multithreadingserver
bimtschlauch.cs
Startprogramm:
Als Server: bimtschlauch port hört auf Port
als Client: bimtschlauch host port

MTConsoleSockethandler.cs
wird von obigen bimtschlauch.cs aufgerufen und instanziiert zwei Threads, die
Makefile für MONO

Asynchone Ereignisse

Das AsyncServer.cs zeigt, wie Asyncron von einem Netzwerksocket gelesen werden kann.

Offen: Kann man auch asynchron von der Console lesen ? Oder von einem Textreader ? TextReader tIn = Console.In;

AsyncServer.cs

Informatik- und Netzwerkverein Ravensburg e.V Rudolf Weber