UNIX Domain Socket -Verwendung

UNIX Domain Socket -Verwendung
„Wenn Daten zwischen Prozessen, die auf demselben Host -Betriebssystem ausgeführt werden. Kommunikationsbuchse mit Inter-Process, die häufig als UDS bezeichnet wird, ist eine Art IPC-Sockel. Prozesse, die auf derselben CPU ausgeführt werden. Verwenden Sie die Socket -Funktion und AF_UNIX als Domain des Sockets, um einen UNIX -Domänen -Socket zu ermitteln. Eine UNIX -Domänen -Socket muss an einen bestimmten Dateipfad gebunden sein. Um effektiv zwischen den Prozessen auf demselben Computer zu kommunizieren, wird die Socket -Familie der AF_UNIX (allgemein als AF_Local) implementiert.”

In der Vergangenheit wurden UNIX -Domänen -Sockets entweder nicht identifiziert oder mit einem Dateisystempfadname verknüpft. In diesem Artikel werden wir die Verwendung der UNIX -Domain -Socket erörtern.

Sehen wir uns ein Beispiel an, in dem wir die Familie AF_UNIX Socket Domain verwendet haben, um die Kommunikation zwischen Client und Server durchzuführen. Wir können mehrere Clients erneut auf einem einzelnen Server ausführen, aber für Demo -Zwecke verwenden wir nur den einzelnen Client, der mit einem Server verbunden ist. In diesem Fall kommunizieren zwei verschiedene Prozesse, die für den Server ausgeführt werden und einer für einen Client, auf demselben Computer, für den die UNIX -Domänen -Socket verwendet wird. Erstellen Sie eine Datei mit VIM -Editor und nennen Sie es iT Server1.C, aber Sie können Nano oder einen anderen Editor verwenden.

Geben Sie die nachfolgenden Codezeilen in die Datei ein, wenn sie im Einfügenmodus geöffnet ist (Escape + I). Definieren Sie zunächst die Socket -Namensvariable, ich.e., Der Name der Kommunikationsbuchse. Im temporären Verzeichnis haben wir die Socket -Datei hinzugefügt. Die nachfolgenden Codezeilen werden vor der Hauptfunktion enthalten, einschließlich der erforderlichen Header -Dateien. Die strukturelle Variable des Socket -Namens des Typs sockaddr_un wird deklariert. Erstellen Sie vier Variablen des Ganzzahltyps, der später verwendet werden soll. Die Erstellung der Server -Socket und der Kanalkommunikation wurde in die folgenden Schritte unterteilt:

1. Verwenden des Socket () -Systemaufrufs und des AF UNIX -Flag. Zukünftige Systemaufrufe können mit dem Dateideskriptor getätigt werden, den diese Methode zurückgibt. Die Variable der Verbindungssocket, die ein Serverdateideskriptor ist, wird in der bedingten Anweisung getestet, um festzustellen.

2. Als nächstes müssen wir die tragbare Memset -Funktion verwenden, um den Speicher vollständig zu löschen. Setzen Sie den Familiennamen der Steckdose danach auf AF Unix.

3. Damit der Client eine Verbindung herstellen kann, bindet der Server den Socket mit dem Aufruf von Bind () an eine bekannte Adresse, kopieren Sie den Socket_Name jedoch in den Socket_Name.Sun_Path -Variable mithilfe von String Copy -Methode (StrCopy). Die Verwendung der Rückgabe führt zu einem bedingten Ausdruck, stellen wir fest, ob der Bindungssystemaufruf erfolgreich war oder nicht.

4. Der Serveranruf für Hören () wird vom Server verwendet, um einen Socket als passiv oder als einen als einen zu bezeichnen, der eingehende Verbindungsanforderungen von Clients akzeptiert.

5. Der Client sendet individuelle Nachrichten für jede seiner Befehlszeileneingaben. Der Server berechnet die Summen eingehender Nachrichten. Die Befehlszeichenfolge "Ende/Eingabetaste" wird vom Client gesendet. Der Server antwortet mit einer Nachricht, die die Zahlen des Clients zusammenfasst. Nach dem Drucken der Summe der Eingabewerte als Antwort durch den Server beendet der Client. So schnell wartet der Server wie ein neuer Client mithilfe der Schleife. Der Parameter „Down“ kann verwendet werden, um den Server zu beenden, wenn der Client aufgerufen wird.

6. Das Verbindungshören erfolgt im ersten für die Schleife, während Lese- und Schreibvorgänge in der zweiten Schleife aufgerufen werden. Beim Senden von Nachrichten an Clients verwendet der Server den Schreibsystemaufruf.

7. Danach kann der Peer Socket über die Systemfunktionen Read () und Write () erreicht werden (i.e., um zwischen dem Server und dem Client zu kommunizieren).

8. Schließlich sollte der Server die Methode close () aufrufen, um die Verbindung zu schließen, nachdem sie auf den Socket zugegriffen hat.

Verwenden Sie den im Screenshot angegebenen Befehl, um den Code unter Linux mit dem GCC -Compiler zu kompilieren. Dieser Befehl erstellt eine serverkenne Ausgabedatei.

Hier ist der Code der clientseitigen Datei in der C-Programmiersprache C. Der in der Serverdatei verwendete Socket -Name wird auch für die Kommunikation benötigt. Erstellen Sie eine UNIX -Domänen -Socket, nachdem Sie die erforderlichen Header -Dateien importiert haben, und verwenden Sie denselben Ansatz wie in der Serverdatei. Der REST -Code ähnelt dem Client, der mit dem System write () systemanruf verwendet wird, um Eingaben an den Server zu senden. Die Parameter in der Hauptfunktionsheader werden verwendet, um die Befehlszeileneingänge zu lesen, und dann schreiben wir sie mit einer für die Schleife, um an den Server zu übertragen. Warten Sie auf die Serverantwort mit der Lesemethode nach einem erfolgreichen Schreibvorgang. Die Lesemethode hält die Antwort des Servers in einem Puffer und zeigt sie dann auf dem Bildschirm an. Schließen Sie die Socket -Verbindung nach dieser Kommunikation.

Lassen Sie uns untersuchen, wie der Server und der Client interagieren. Dazu benötigen wir zwei Terminals, in denen wir zuerst die Serverausgabendatei ausführen müssen, bevor wir den Client starten und Eingaben an den Server senden müssen. Der Client beendet sich nach dem Lesen und Anzeigen der Antwort des Servers.

Falls die Bind-Address bereits verwendet wird.

Wenn der Server offline ist und ein Client eine Verbindung herstellen möchte, wäre die Ausgabe wie die unten.

Wenn ein Client keine Eingabenummer angibt:

Wenn der Client während der Kommunikation mit dem Server eine Nummer eingibt.

So schließen Sie den Server auf Client -Anfrage ab

Abschluss

In diesem Artikel haben wir die Verwendung von clientseitig und serverseitig zur Verwendung der UNIX-Domain-Socket gezeigt. Dafür haben wir den einfachen C -Code für beide Seiten im Kali Linux -Betriebssystem ausprobiert. Wir hoffen, Sie erhalten gute Hilfe aus diesem Artikel.