Beispiel für Socketprogrammierung

Solche kleine Programme muß man als Systemprogrammierer mal selber geschrieben haben:
(netcat ist ein ausgebufftes Hackertool und besser, aber schwer verständlich)
schlauch_v1.c
Hier ein ganz einfacher kombinierter TCP-Client und Sender
tcpdaemon.c
Dies ist ein TCP-Server, der mit select(2) arbeitet. Damit Der Server schickt das über den Socket empfangene aus die Standardausgabe und das von der Standardeingabe über den socket zurück.
Damit kann man Protokolle wie SMTP,POP3,IMAP4 serverseitig analyiseren
schlauch.c
Hier wurde nun der Serverteil mit der Signalbehandlung ausgestattet
schlauch.c
bischlauch.c
Dies ist die bidirektionale Version, wo Client und Server integriert sind.
Folgende Merkmale: Noch nicht realisierte Überlegungen:

Polymorphie: Verschiedene Kommunikationsmechanismen

Hier haben wir das obige Schlauchprogramm in zwei Teile geteilt. Dafür kann man nun sowohl lokale UNIX-Sockets als auch TCP-Verbindungen verwenden:
sender.c
Aufruf: sender inet:rechner:port|unix:dateiname
empfaenger.c
Aufruf: empfaenger [-q] [-v] unix:dateiname| inet:port

Mit der Option -q wird das Ergebnis nicht auf die Standardausgabe geschieben. Dies dient für die Performancemessung.

messtest.c
Testprogramm für Zeitmessung
socketbsp.tgz

Noch zu tun:

Links

libinet6-20000327.tar.gz
libinet6, die die ipv6-Implementierung macht (gefunden von Andi Kübler
Dr. Edward G. Bradford: Run Time Programming Sockets
hier wird Linux- und Windows-Socketprogrammierung verglichen. (Gefunden von Walter Jäger)
Weitere Links zu IPv6 haben wir hier.

Bemerkungen zu C++

In C++ könnte man die Polymorphie noch eleganter ausdrücken.
In jedem CORBA-ORB wie in MICO oder TAO wurde das gemacht.
Diese Klassen können und sollen wiederverwendet werden (bei TAO das ACE). Damit sind dann die Systemcalls tief in den Klassen versteckt, so daß man sich gar nicht mehr darum kümmern muß (es sei dann, man stellt merkwürdige Effekte fest :-).
Hier wollen wir nur ganz einfach mit dem Systemcalls spielen ....
Rudolf Weber Informatik- und Netzwerkverein Ravensburg e.V