C-Programmierung

POSIX-Socket mit C-Programmierung

POSIX-Socket mit C-Programmierung

Ein POSIX-Socket oder einfach ein Socket ist als Kommunikationsendpunkt definiert. Wenn beispielsweise zwei Parteien, A und B, miteinander kommunizieren möchten, müssen beide Parteien eine Verbindung zwischen ihren jeweiligen Endpunkten herstellen. Ein Socket stellt den Kommunikationspartnern ein Gateway zur Verfügung, über das die Nachrichten reisen. Wenn wir von Client und Server sprechen, besteht die Aufgabe des serverseitigen Sockets darin, die eingehenden Verbindungen abzuhören, während der clientseitige Socket für die Verbindung zum serverseitigen Socket verantwortlich ist. Dieser Artikel soll das Konzept des POSIX-Sockets mit C-Programmierung deutlicher machen.

Beispiel für die Verwendung von Posix Socket mit C-Programmierung in Linux Mint 20

Das Ihnen in diesem Abschnitt vorgestellte Beispiel demonstriert eine Interaktion zwischen einem Client und einem Server. Der Client und der Server sind die beiden Haupteinheiten des Client/Server-Modells in der Computerwelt. In unserem Beispiel senden und empfangen sowohl der Client als auch der Server Nachrichten an und von einander, während sie den POSIX-Socket mit C-Programmierung in Linux Mint 20 verwenden. Um das Verständnis des Codes zu verdeutlichen, haben wir den clientseitigen und den serverseitigen Code getrennt und werden Ihnen beide im Folgenden separat erklären.

Der serverseitige Code

Für den serverseitigen Code haben wir einfach ein leeres Dokument im Home-Verzeichnis unseres Linux Mint 20-Systems erstellt und es Server genannt.c. In dieses leere Dokument müssen Sie die Code-Snippets schreiben, die in den drei Bildern unten gezeigt werden:

Der in den obigen Bildern gezeigte Code mag langwierig erscheinen, aber lassen Sie uns versuchen, ihn auf eine extrem einfache Weise zu verstehen. Als erstes haben wir eine Buchse erstellt und mit der gewünschten Portnummer verbunden, die in unserem Fall 8080 . ist. Dann haben wir eine Listen-Funktion geschrieben, die alle eingehenden Verbindungen von den Clients sucht look. Im Grunde schafft es der Client, sich mit dem Server zu verbinden, nur weil diese Listenfunktion vorhanden ist. Und sobald diese Verbindung hergestellt ist, ist der Server bereit, Daten zum und vom Client zu senden und zu empfangen.

Die Funktionen Lesen und Senden dienen dem Empfangen bzw. Senden von Nachrichten an die Clients. Wir haben in unserem Code bereits eine Standardnachricht definiert, die wir unserem Client senden möchten, und das ist "Hallo vom Server". Nachdem diese Nachricht an den Client gesendet wurde, wird sie auf der Clientseite angezeigt, während auf der Serverseite eine Nachricht mit der Aufschrift „Hallo Nachricht gesendet“ angezeigt wird. Hier dreht sich alles um unseren serverseitigen Code.

Der clientseitige Code

Nun, für den clientseitigen Code haben wir wieder ein leeres Dokument im Home-Verzeichnis unseres Linux Mint 20-Systems erstellt und es client genannt.c. In dieses leere Dokument müssen Sie die Code-Snippets schreiben, die in den beiden Bildern unten gezeigt werden:

Im clientseitigen Code, der in den obigen Bildern gezeigt wird, haben wir einen Socket auf die gleiche Weise wie für den serverseitigen Code erstellt. Dann gibt es eine Verbindungsfunktion, die versucht, eine Verbindung mit dem Server über den angegebenen Port herzustellen. Und sobald diese Verbindung vom Server akzeptiert wird, sind Client und Server so eingestellt, dass sie Nachrichten an- und voneinander senden und empfangen.

Genau wie der serverseitige Code sind die Sende- und Lesefunktionen dazu da, Nachrichten vom Server zu senden bzw. zu empfangen. Außerdem haben wir eine Standardnachricht erwähnt, die wir an den Server senden möchten, und zwar "Hallo vom Client". Nach dem Senden dieser Nachricht an den Server wird diese Nachricht auf der Serverseite angezeigt, während auf der Clientseite eine Nachricht mit der Aufschrift „Hallo Nachricht gesendet“ angezeigt wird. Und damit sind wir am Ende der Erklärung unseres clientseitigen Codes.

Kompilieren und Ausführen der client- und serverseitigen Codes

Natürlich werden wir sowohl unsere clientseitigen als auch serverseitigen Dateien speichern, nachdem wir diese Programme geschrieben haben, dann sind wir bereit, diese Codes zu kompilieren und auszuführen run. Somit werden wir in der Lage sein, die Interaktion zwischen unserem neu erstellten Client und Server zu visualisieren. Um dieses Ziel zu erreichen, müssen wir zwei verschiedene Terminals starten, da wir zwei separate Programme ausführen sollen. Ein Terminal ist für die Ausführung des serverseitigen Codes und das andere für den clientseitigen Code vorgesehen.

Um unseren serverseitigen Code zu kompilieren, führen wir den folgenden Befehl im ersten Terminal aus:

$ gcc-Server.c -o server

Wenn nach dem Ausführen dieses Befehls keine Fehler in Ihrem serverseitigen Code auftreten, wird auf dem Terminal nichts angezeigt, was ein Hinweis auf eine erfolgreiche Kompilierung ist.

Auf die gleiche Weise kompilieren wir den clientseitigen Code mit dem unten gezeigten Befehl, indem wir ihn im zweiten Terminal ausführen:

$ gcc-Client.c -o Kunde

Sobald beide Codes kompiliert sind, werden wir sie nacheinander ausführen. Wir müssen jedoch zuerst den serverseitigen Code ausführen, da er auf die Verbindungsanfragen hören soll. Der serverseitige Code kann mit dem folgenden Befehl ausgeführt werden:

$ ./Server

Nachdem wir den serverseitigen Code ausgeführt haben, können wir den clientseitigen Code mit dem unten gezeigten Befehl ausführen:

$ ./Klient

Sobald sowohl der Client als auch der Server betriebsbereit sind, sehen Sie die in den folgenden Bildern gezeigten Ausgaben auf beiden Terminals:

Fazit

Nachdem Sie das in diesem Artikel vorgestellte Beispiel durchgearbeitet haben, werden Sie hoffentlich in der Lage sein, die POSIX-Sockets effizient zum Senden und Empfangen von Daten zwischen einem Client und einem Server zu verwenden. Dieses Beispiel ist nur eine grundlegende Demonstration der Posix-Sockets mit C-Programmierung, Sie können diese Programme jedoch nach Ihren Anforderungen sogar komplexer gestalten.

Beste Befehlszeilenspiele für Linux
Die Befehlszeile ist nicht nur Ihr größter Verbündeter bei der Verwendung von Linux – sie kann auch eine Quelle der Unterhaltung sein, da Sie damit vi...
Beste Gamepad-Mapping-Apps für Linux
Wenn du Spiele unter Linux gerne mit einem Gamepad statt mit einem typischen Tastatur- und Maus-Eingabesystem spielst, gibt es einige nützliche Apps f...
Nützliche Tools für Linux-Spieler
Wenn Sie gerne unter Linux spielen, haben Sie wahrscheinlich Apps und Dienstprogramme wie Wine, Lutris und OBS Studio verwendet, um das Spielerlebnis ...