Galileo Computing < openbook >
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung


'Wie werde ich Unix-Guru' als Buch bestellen
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

 
Galileo Computing / <openbook> / "Wie werde ich UNIX-Guru ?"
« Grundlagen der Dämonisierung UNIX-Systemaufrufe Kommunikationsendpunkt: socket und close »

Client-Server Socketprogrammierung

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.

Übersicht über die Systemaufrufe

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.



Unterabschnitte
    • Übersicht über die Systemaufrufe

  • Kommunikationsendpunkt: socket und close
  • Serveraufrufe: bind, listen und accept
  • Clientaufruf: connect
  • Datenaustausch: send und recv
  • Namensauflösung
  • Zahlendreher ntoh und hton
  • Rahmenprogramm eines Client-Server Paars
    • Parallelität

  • Mehrere Sockets parallel abfragen
  • IPv6 aus Programmierersicht
  • Client-Server aus Sicht der Performance


« Grundlagen der Dämonisierung | UNIX-Systemaufrufe | Kommunikationsendpunkt: socket und close »
 
 Zum Katalog
Zum Katalog
Wie werde ich UNIX-Guru?
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 UNIX/Linux

PHP 4-Workshop

Einstieg in Python

Perl fürs Web

MySQL 4

GNOME 2.0
 Empfehlung

Einstieg in XML
 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
Info

 MyGalileo
Der Service für registrierte Leser:
Zu MyGalileo
Info



Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.
[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de