A. Willemer Wie werde ich UNIX-Guru
| | I ANWENDUNG |
Know-How für Unix/Linux-User: Einführung, Shell, Befehle, Hilfe, Arbeit mit Dateien, Editoren, Reguläre Ausdrücke, nützliche Tools, Hardware.
|
II ADMINISTRATION |
Tools, Systemstart, Benutzer verwalten, Hardware konfigurieren, Software installieren, Datensicherung, Tuning, Kernel
|
III NETZWERK |
Client/Server Systeme, TCP/IP, Routing, IPv6, Internet-Dienste, DHCP, Webserver, Firewalls
|
IV DAS X-WINDOW SYSTEM |
Die grafische Oberfläche von UNIX einrichten und nutzen
|
V PROGRAMMIERUNG VON SHELLSKRIPTEN |
Automatisieren von Tasks durch Shell-Skripte.
|
VI PERL |
Interpreter, Syntax, Variablen, Steuerung, Funktionen, UNIX-Aufrufe, GUIs mit Tk
|
VII PROGRAMMIERWERKZEUGE |
C-Compiler, Analyse-Tools, CVS, yacc, diff
|
VIII UNIX-SYSTEMAUFRUFE |
UNIX-Befehle in eigenen Programmen nutzen
|
IX LITERATUR |
Weiterführende Literatur zu UNIX und LINUX
|
| |
Im Gegensatz zu den anderen Abschnitten der UNIX-Programmierung soll die
Socketprogrammierung am Beispiel eines Client-Server-Paares erläutert
werden. Dabei soll zunächst die Struktur einer solchen Architektur erläutert
werden, und dann die Details betrachtet werden.
Die Socketprogrammierung ist die Grundlage der Programmierung verteilter
Anwendungen unter TCP/IP in kommerziellen Client"-Server"-Architekturen als auch
bei Internetanwendungen.
Ein Socket (engl. Steckdose) ist ein Verbindungsendpunkt, der vom Programm
wie eine gewöhnliche Datei mit read() und write() beschrieben und gelesen
werden kann. Ein Socket wird auch mit close() geschlossen. Er wird
allerdings nicht mit open() eröffnet, sondern mit dem Aufruf socket() .
Auf der folgenden Abbildung sehen Sie auf der linken Seite den Ablauf eines
typischen Servers und auf der rechten einen entsprechenden Client. Die Pfeile
dazwischen zeigen auf die Synchronisationspunkte. Die Pfeilrichtung soll
zeigen, wer wen freisetzt.
Der Serverprozess muss vom Client eindeutig angesprochen werden können.
Dazu bindet er sich mit dem Aufruf bind() an eine feste Socketnummer,
den
so genannten well known port, über den er erreichbar ist. Die Nummer des Ports
wird in der Datei /etc/services mit einem Servicenamen verbunden.
Im Programm kann der Servicename durch den Aufruf von getservbyname()
wieder in eine Zahl umgewandelt werden.
Dann bereitet der Server mit listen() den Aufruf von accept() vor.
Der Aufruf von accept() blockiert den Prozess bis eine Anfrage von einem
Client eintrifft.
Direkt anschließend wird der Server read() oder alternativ recv() aufrufen, um
den Inhalt der Anfrage zu lesen.
Er verarbeitet die Anfrage und sendet die Antwort an den derzeit wartenden
Client. Anschließend kehrt der Server zum accept() zurück, um auf weitere Anfragen
zu warten.
Der Client braucht keinen festen Port.
Er benutzt einen normalen Socket, dem vom System eine freie Nummer zugeteilt
wird. Der Server erfährt die Nummer des Clients aus der Anfrage und kann ihm
unter diesem Port antworten. Im nächsten Schritt ruft der Client connect()
auf, um eine Verbindung mit dem Server aufzunehmen, der in den Parametern
beschrieben wird. Sobald die Verbindung steht, sendet der Client seine
Anfrage per write() oder alternativ send() und wartet per read() oder recv()
auf die Antwort des Servers. Nach dem Erhalt der Daten schließt der Client
seine Verbindung.
Tabelle fasst die Systemaufrufe, die die Socketprogrammierung betreffen,
zusammen.
[Übersicht über die wichtigsten Netzaufrufe]L|L
Aufruf & Zweck
socket & Anforderung eines Kommunikationsendpunktes
bind & Lege die Portnummer fest
listen & Festlegen der Pufferzahl für Anfragen
accept & Auf Anfragen warten
connect & Verbindung anfordern
send & Senden von Daten
recv & Empfangen von Daten
close & Schließen des Sockets
In den folgenden Abschnitten werden diese Aufrufe näher untersucht.
| |
|
|
Ihre Meinung? |
|
|
|
|
| |
| |
Shopping |
|
Versandkostenfrei bestellen in Deutschland und Österreich Info
|
|
| |
| |
|