Sockets ermöglichen die Kommunikation zwischen zwei verschiedenen Prozessen auf demselben oder verschiedenen Computern. Um genauer zu sein, ist es eine Möglichkeit, mit anderen Computern über Standard-Unix-Dateideskriptoren zu sprechen. In Unix wird jede E / A-Aktion durch Schreiben oder Lesen eines Dateideskriptors ausgeführt. Ein Dateideskriptor ist nur eine Ganzzahl, die einer geöffneten Datei zugeordnet ist, und kann eine Netzwerkverbindung, eine Textdatei, ein Terminal oder etwas anderes sein.
Für einen Programmierer sieht und verhält sich ein Socket ähnlich wie ein Low-Level-Dateideskriptor. Dies liegt daran, dass Befehle wie read() und write() mit Sockets genauso funktionieren wie mit Dateien und Pipes.
Sockets wurden zuerst in 2.1BSD eingeführt und anschließend mit 4.2BSD in ihre aktuelle Form verfeinert. Die Sockets-Funktion ist jetzt mit den meisten aktuellen UNIX-Systemversionen verfügbar.
Wo wird Socket verwendet?
Ein Unix-Socket wird in einem Client-Server-Anwendungsframework verwendet. Ein Server ist ein Prozess, der einige Funktionen auf Anfrage eines Clients ausführt. Die meisten Protokolle auf Anwendungsebene wie FTP, SMTP und POP3 verwenden Sockets, um eine Verbindung zwischen Client und Server herzustellen und dann Daten auszutauschen.
Socket-Typen
Den Benutzern stehen vier Arten von Sockets zur Verfügung. Die ersten beiden werden am häufigsten verwendet und die letzten beiden werden selten verwendet.
Es wird angenommen, dass Prozesse nur zwischen Sockets desselben Typs kommunizieren, aber es gibt keine Einschränkung, die die Kommunikation zwischen Sockets verschiedener Typen verhindert.
-
Stream Sockets – Lieferung in einer vernetzten Umgebung ist garantiert. Wenn Sie drei Elemente „A, B, C“ über den Stream−Socket senden, kommen sie in derselben Reihenfolge an – „A, B, C“. Diese Sockets verwenden TCP (Transmission Control Protocol) für die Datenübertragung. Wenn die Zustellung nicht möglich ist, erhält der Absender eine Fehleranzeige. Datensätze haben keine Grenzen.
-
Datagramm-Sockets – Die Bereitstellung in einer Netzwerkumgebung ist nicht garantiert. Sie sind verbindungslos, da Sie keine offene Verbindung wie in Stream-Sockets benötigen – Sie erstellen ein Paket mit den Zielinformationen und senden es aus. Sie verwenden UDP (User Datagram Protocol).
-
Raw-Sockets – Diese bieten Benutzern Zugriff auf die zugrunde liegenden Kommunikationsprotokolle, die Socket-Abstraktionen unterstützen. Diese Sockets sind normalerweise datagrammorientiert, obwohl ihre genauen Eigenschaften von der vom Protokoll bereitgestellten Schnittstelle abhängen. Raw-Sockets sind nicht für den allgemeinen Benutzer gedacht; sie wurden hauptsächlich für diejenigen bereitgestellt, die an der Entwicklung neuer Kommunikationsprotokolle interessiert sind oder Zugang zu einigen der kryptischeren Einrichtungen eines vorhandenen Protokolls erhalten möchten.
-
Sequenzierte Paket-Sockets – Sie ähneln einem Stream-Socket, mit der Ausnahme, dass Datensatzgrenzen beibehalten werden. Diese Schnittstelle wird nur als Teil der Network Systems (NS) -Socket-Abstraktion bereitgestellt und ist in den meisten ernsthaften NS-Anwendungen sehr wichtig. Sequenced-Packet-Sockets ermöglichen es dem Benutzer, die Sequence Packet Protocol (SPP) – oder Internet Datagram Protocol (IDP) -Header auf einem Paket oder einer Gruppe von Paketen zu manipulieren, indem er entweder einen Prototyp-Header zusammen mit den zu sendenden Daten schreibt oder indem er einen Standard-Header angibt, der mit allen ausgehenden Daten verwendet werden soll, und dem Benutzer ermöglicht, die Header auf eingehenden Paketen zu empfangen.
Was kommt als nächstes?
Die nächsten Kapitel sollen Ihre Grundlagen stärken und eine Grundlage vorbereiten, bevor Sie Server- und Client-Programme mit Socket schreiben können. Wenn Sie direkt springen möchten, um zu sehen, wie Sie ein Client- und Serverprogramm schreiben, können Sie dies tun, dies wird jedoch nicht empfohlen. Es wird dringend empfohlen, dass Sie Schritt für Schritt vorgehen und diese ersten Kapitel abschließen, um Ihre Basis zu erstellen, bevor Sie mit der Programmierung fortfahren.