Sockets

Die Socket-Schnittstelle dient als standardisierte Programmierschnittstelle zwischen dem Anwendungsprogramm und TCP/IP. Neben der rechnerübergreifenden Kommunikation von Prozessen über TCP/IP, wird sie auch zur lokalen Interprozesskommunikation genutzt.

Die Socket-Schnittstelle kommt aus der UNIX-Welt. Mit dem 4.2BSD wurden die Sockets in UNIX eingeführt. Eine allgemein verfügbare Spezifikation, die auf den UNIX-Sockets basiert, wurde von der Firma Mircosoft unter der Bezeichnung WinSock in das WOSA aufgenommen und wurde damit ein etablierter Standard.

Ein großer Vorteil der Verwendung von Sockets ist ihre Homogenität, d. h. eine Kommunikation über Sockets ist unabhängig von dem Standort der Prozesse, dem Betriebssystem, der Rechnerarchitektur und dem Übertragungsmedium. Der Aufbau einer TCP/IP Verbindung aus einem Anwenderprogramm wird durch die Verwendung von Sockets sehr einfach. Der Anwendungssoftware stehen die in Tabelle 1.1 gezeigten TCP-Systemaufrufe zur Verfügung.

Zum Aufbau einer Verbindung werden vom Client und Server mit Hilfe des Funktionsaufrufes socket() eine Instanz der Socket-Schnittstelle erstellt und das Transportprotokoll festgelegt. Durch den Systemaufruf bind() legt der Server den lokalen Host und den lokalen Port fest. Damit ist die Adresse festgelegt, auf welcher der Server dem Client antwortet. Nach dem Aufruf der Funktionen listen() und accept() wartet der Server auf ein connect() des Clients. Der Client bekommt mit dem connect()-Aufruf implizit eine lokale Adresse zugewiesen und übergibt sie dem Server. Die Verbindung ist nun aufgebaut und Client und Server können mit read()- und write()-Funktionen bidirektionalen, byteorientierten Datenaustausch betreiben. Durch den Systemaufruf close() wird die Verbindung abgebaut. Tabelle 1.1 vergleicht eine Socket-Verbindung zwecks Anschaulichkeit mit einem Telefongespräch.


Prozess 1 Server Prozess 2 Client Funktion Analogie beim Telefonieren
socket() socket() Socket erstellen Telefonhörer abheben
bind() Adresse dem Socket zuweisen Telefonnummern zuweisen
listen () Erlaubnis erteilen, mit dem Socket Verbindung aufzunehmen Erlaubnis erteilen, angerufen zu werden
connect() Verbindungswunsch mitteilen Telefonnummer wählen
accept() Verbindung komplett aufbauen Anruf beantworten
write() write() Daten über die Schnittstelle senden Reden
read() read() Daten empfangen Zuhören
close() close() Socket schließen Auflegen

Tabelle 1.1



pronto 2010/03/30 19:00