Python-Socket-Flush

Abid Ullah 15 Februar 2024
  1. Python-Socket-Flush
  2. Leeren Sie einen Socket in Python
Python-Socket-Flush

In diesem Artikel werden wir sehen, wie das socket-Modul von Python eine Low-Level-Schnittstelle zur zugrunde liegenden Netzwerk-Socket-Implementierung bereitstellt. Wir werden einige wichtige Methoden in den socket-Modulen in Python sehen.

Wir werden auch einige Python-Codes durchgehen, um zu verstehen, wie Nachrichten mit Python vom Server zum Client gesendet werden. Fangen wir also an.

Python-Socket-Flush

Haben wir uns jemals gefragt, wie man einen Socket in Python leert? Wenn ja, sind wir nicht allein.

Das Leeren eines Sockets ist bei vernetzten Anwendungen üblich, aber die meisten Menschen brauchen Hilfe, um zu verstehen, wie es funktioniert.

In diesem Python-Artikel werden wir uns ansehen, was Socket Flushing ist und wie es funktioniert. Wir werden auch besprechen, wie man einen Socket in Python leert.

Sockelspülung definiert

Wenn wir einen Socket leeren, löschen wir seinen internen Puffer. Dieser Puffer speichert Daten, die darauf warten, gesendet oder empfangen zu werden.

Das Leeren eines Sockets ist häufig erforderlich, um sicherzustellen, dass alle Daten im Puffer gesendet oder empfangen werden.

Wenn wir beispielsweise Daten an einen Remote-Server senden, möchten wir möglicherweise den Socket leeren, um sicherzustellen, dass alle Daten gesendet werden, bevor die Verbindung geschlossen wird.

Die Socket-Flush-Funktion von Python wird zum Leeren des Schreibpuffers des Sockets verwendet. Diese Funktion wird normalerweise verwendet, um sicherzustellen, dass alle Daten im Puffer gesendet werden, bevor der Socket geschlossen wird.

Prozess der Sockelspülung

Wenn wir einen Socket leeren, werden die Daten im Puffer sofort gesendet oder empfangen. Das Leeren eines Sockets wird normalerweise vom Betriebssystem (Windows, Mac oder Linux) durchgeführt.

Über die Funktionsweise der Steckdosenspülung brauchen wir uns in den meisten Fällen keine Gedanken zu machen. Es ist jedoch wichtig zu verstehen, dass die Daten im Puffer sofort gesendet oder empfangen werden, was bedeutet, dass die Daten verloren gehen können, wenn die Verbindung geschlossen wird, bevor alle Daten gesendet wurden.

Leeren Sie einen Socket in Python

Das Leeren eines Sockets in Python ist relativ einfach. Der Vorgang ähnelt dem Leeren einer Datei in Python.

Wie wir sehen können, ist der Prozess recht einfach. Beachten Sie jedoch, dass die Daten im Puffer sofort gesendet werden. Daher müssen wir darauf achten, dass alle Daten gesendet werden, bevor die Verbindung geschlossen wird.

Wir müssen das socket-Modul oder -Framework importieren, um die Socket-Programmierung in Python zu erreichen. Dieses Modul besteht aus integrierten Methoden, die zum Erstellen von Sockets erforderlich sind und ihnen helfen, sich miteinander zu verbinden.

Wichtige Methoden des Moduls socket:

  1. socket.socket(): Wird verwendet, um Sockets zu erstellen (sowohl auf Server- als auch auf Clientseite erforderlich, um Sockets zu erstellen).
  2. socket.accept(): Wird verwendet, um eine Verbindung zu akzeptieren. Es gibt ein Wertepaar zurück (conn, address).
  3. socket.bind(): Wird verwendet, um an die als Parameter angegebene Adresse zu binden.
  4. socket.close(): Wird verwendet, um an die als Parameter angegebene Adresse zu binden.
  5. socket.connect(): Socket als geschlossen markieren.
  6. socket.listen(): Wird verwendet, um eine Verbindung zu einer als Parameter angegebenen Remote-Adresse herzustellen.

Server

Jetzt erstellen wir eine Datei und geben ihr einen Namen. In unserem Fall haben wir die Datei SERVER1.py genannt.

Jetzt beginnen wir mit dem Schreiben des Codes für den Server.

Zuerst importieren wir also die Bibliothek socket. Dann erstellen wir mit der Methode socket.socket() einen Socket und weisen ihn sock zu.

Und innerhalb der Klammer geben wir die Adressfamilie als AF_INET an, indem wir ein socket.AF_INET verwenden. Beachten Sie, dass sich AF_INET auf eine Adresse aus dem Internet bezieht.

Und es erfordert ein Paar Hosts und eine Portnummer. Der Host kann entweder eine URL einer bestimmten Website oder ihre Adresse oder Portnummer als Ganzzahl verwenden.

Der zweite Parameter, den wir spezifizieren werden, ist ein socket.SOCK_STREAM. Der SOCK_STREAM wird verwendet, um TCP-Protokolle zu erstellen.

Als nächstes müssen wir die bind-Funktion schreiben. Die bind-Methode akzeptiert zwei Parameter als Tupel, so dass es zusammen ein Parameter ist.

Es stimmt mit einem Host und einer Portnummer überein. Als Parameter verwenden wir ein socket.gethostname(), 1024.

Wir verwenden die bind-Methode, weil wir möchten, dass sich der Server an den Client bindet.

Jetzt verwenden wir die listen-Methode und übergeben eine beliebige Zahl. In unserem Fall haben wir 5 bestanden.

Jetzt verwenden wir eine Schleife, damit der Server den Client-Socket und seine Adresse akzeptiert, während die Verbindung True ist. Wir verwenden dafür die Methode accept.

Sobald wir den Client-Socket und seine Adresse erhalten haben, drucken wir ihn aus. Wir verwenden die print-Methode, und in der print-Methode verwenden wir die f-Zeichenfolge.

Der String f ist ein Literal-String mit vorangestelltem f und enthält Python-Ausdrücke in Klammern. Innerhalb der print-Anweisung geben wir die Meldung Verbindung zu {adr} hergestellt. aus.

Sobald die Verbindung hergestellt ist, möchten wir also einige Nachrichten vom Server an den Client weiterleiten. Dazu verwenden wir c.send.

Und da wir ein Byte brauchen, werden wir es spezifizieren. Darin schreiben wir unsere Nachricht.

In unserem Fall lautet unsere Botschaft Socket-Programmierung in Python. Da wir Bytes verwendet haben, müssen wir schreiben, welche Art von Bytes.

In unserem Fall schreiben wir utf-8. Unser Server ist jetzt bereit.

Beispielcode:

import socket

# We imported the socket library
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((socket.gethostname(), 1024))
sock.listen(5)
while True:
    clt, adr = sock.accept()
    print(f"Connection to {adr} established.")
    clt.send(bytes("Socket programming in Python", "utf-8"))

Wir werden bemerken, dass der Cursor an der Eingabeaufforderung blinkt. Jetzt werden wir zum Client wechseln.

Klient

Wir öffnen also eine neue Datei im selben Verzeichnis und geben ihr einen Namen.

In unserem Fall haben wir die Datei CLIENT1.py genannt. Als erstes importieren wir die Bibliothek socket.

Jetzt verwenden wir die Methode socket, um einen Socket für den Client zu erstellen. Genauso haben wir es für den Server erstellt.

Jetzt möchten wir, dass sich unser Client mit dem Server verbindet. Wir verwenden also die Methode connect und geben den Parameter als gethostname zusammen mit der gleichen Portnummer an, die wir auf dem Server verwendet haben. Also 1024.

Jetzt müssen wir die Nachricht in einer Variablen speichern. In unserem Fall nennen wir es msg.

Wir verwenden die recv-Methode, um die Nachricht zu erhalten. Zu dieser recv-Methode können wir eine beliebige Anzahl von Bytes als Parameter angeben.

Dieser Parameter wird in einer Kommunikation zwischen dem Server und dem Client empfangen. In unserem ersten Fall verwenden wir also 1024.

Danach drucken wir die Nummer, die wir erhalten haben. Da die übertragene Nachricht verschlüsselt ist, müssen wir das utf-8-Byte verwenden, um sie zu decodieren.

Beispielcode:

import socket

# We imported the socket library
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((socket.gethostname(), 1024))
msg = sock.recv(1024)
print(msg.decode("utf-8"))

Unsere Server- und Client-Dateien sind zur Ausführung bereit.

Server- und Client-Dateien im selben Ordner

Wir öffnen die Eingabeaufforderung im selben Ordner, um diese Dateien auszuführen, und schreiben den Pfad des Servers zuerst als py Dateiname.py. In unserem Fall schreiben wir es also als py SERVER1.py und drücken Enter.

Wir sehen den Cursor dort blinken.

Dann öffnen wir eine weitere Eingabeaufforderung, um die zweite Datei als py Dateiname.py auszuführen. In unserem Fall schreiben wir es als py CLIENT1.py und drücken Enter.

Ausgang:

Verbindung zwischen Client und Server hergestellt

Sobald wir beide Dateien ausführen, erhalten wir die Meldung Socket-Programmierung in Python.

Das Leeren eines Sockets ist eine häufige Aufgabe bei der Arbeit mit Netzwerkanwendungen. Der Prozess ist relativ einfach, aber es ist wichtig, daran zu denken, dass die Pufferdaten sofort gesendet werden.

Bei der Arbeit mit vernetzten Anwendungen ist es wichtig zu verstehen, wie Socket Flush funktioniert. Mit ein wenig Übung könnten wir problemlos einen Socket in Python leeren.

Wir hoffen, dass Sie diesen Python-Artikel hilfreich finden, um zu verstehen, wie Python-Sockets geleert werden.

Autor: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn

Verwandter Artikel - Python Socket