Python-Socket-Programmierung - Bevor ich mit der Python-Socket-Programmierung beginne, hoffe ich, dass Sie gute Grundlagen in Python haben. Wenn Sie Django auch kennen, ist es noch einfacher zu verstehen. Nein, die Socket-Programmierung ist nicht mit Django verwandt, aber die Terminologien in der Python-Socket-Programmierung und in Django sind fast gleich, obwohl es sich um zwei verschiedene Kategorien handelt. Was genau ist Python Socket Programming? Python Socket-Programmierung gibt es nicht nur in Python, sondern auch in Java und fast allen anderen Programmiersprachen. Aber im Falle von Python ist die Socket-Programmierung eigentlich sehr einfach zu verstehen. Python Socket-Programmierung bedeutet Netzwerkprogrammierung. Es enthält clientseitige und serverseitige Python Socket-Codes. Aber diese Definition ist genauso gut wie ein Buch, das besagt, dass C-Programmierung zur Entwicklung von Software verwendet wird. Und nein, dafür bin ich nicht hier. Ich bin hier, um sicherzustellen, dass Sie ein tieferes Verständnis für die Grundlagen der Python-Socket-Programmierung haben, bevor Sie anfangen, Ihre eigenen Socket-Module zu schreiben. Beginnen wir also damit und sehen wir, wie Socket entweder auf der Client-Seite oder auf der Seite des Python Socket-Servers funktioniert.

Was ist Python-Socket-Programmierung?

Wenn Sie C-Programmierung gelernt haben, ist das Erlernen der Python-Socket-Programmierung in Python sehr einfach, da sie fast identisch sind. Zur Vereinfachung ist die Python-Socket-Programmierung nur ein Teil des Codes dafür, wie Computer in einem Netzwerk miteinander kommunizieren. Dies endet nicht nur mit einem LAN-basierten Netzwerk, sondern unterstützt auch WAN-, MAN- und Intranet-basierte Netzwerke. Wir benutzen sogar Steckdosen in unserem täglichen Leben. Nicht verstehend? Lassen Sie mich ein einfaches Beispiel geben. Wenn Sie eine Verbindung zu Facebook.com herstellen möchten, geben Sie einfach dasselbe in die URL-Leiste ein. Diese Verbindung, die Sie gerade erstellt haben, wird also nicht nur von den DNS-Inhalten erstellt. Dies wird alles durch Python-Socket-Programmierung konfiguriert. Sockets entscheiden, wie zwei Netzwerke kommunizieren. Bei jeder Kommunikation über ein Netzwerk kann es sich um ein Video, VoIP-Verbindungen oder nur um Text handeln. Alles geht durch eine Steckdose. Nachdem wir nun wissen, was Sockets sind, können wir unsere eigenen Sockets in Python entwickeln.

Bildquelle: pixabay.com

Arten der Python-Socket-Programmierung

Jetzt gibt es da draußen jede Menge Steckdosen. Aber wir werden nicht über alle reden, da ich hier nicht jeden einzelnen behandeln kann. Sie können entweder einen UDP-Socket, einen TCP-Socket oder sogar einen Port-Socket erstellen. Aber ich würde mich heute mehr mit TCP- und UDP-Sockets befassen, da diese die Grundlagen darstellen und sich als Anfänger für den Einstieg in die Python-Socket-Programmierung hervorragend eignen.

  • UDP-Sockets-Programmierung

User Datagram Protocol oder das allgemein als UDP bezeichnete Protokoll ist ein alternatives Protokoll zu TCP, das Pakete von einem Host zu einem anderen überträgt. Im Gegensatz zu TCP (Transmission Control Protocol) ist UDP ein verbindungsloses Protokoll und nicht stream-orientiert. Dies bedeutet, dass der UDP-Server nur eingehende Pakete vom gesamten Host erfasst, ohne eine zuverlässige Quellverbindung zu identifizieren. Dazu verwenden wir die Funktion socket.socket. Ein einfacher UDP-Socket wird in Python auf folgende Weise erstellt:

Importieren des Sockets # Importieren des Socket-Moduls aus der Python-Bibliothek # Jetzt müssen AF_INET und das Sock-Dgramm socketss = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) erstellt werden. Drucken Sie "Socket Creation Successful".

Ja. Das war's und wir haben hier in Python einen einfachen UDP-Socket erstellt. Python-Socket Das Programmieren oder sogar das Erstellen eines einfachen Sockets ist kein Hexenwerk. Die große Sache ist jedoch, den UDP-Server und den Client zu codieren. Da UDP-Sockets verbindungslos sind, werden Kommunikationen mit Sende- und Empfangs-Socket-Funktionen initiiert. Für diese Funktionen müssen sie nicht miteinander verbunden sein. Sie können Pakete von jeder beliebigen Quelle senden und empfangen. So wird ein UDP-Server erstellt:

import socketport = 2924s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) an bind ((("", port)) print "Verbindungsanforderung an den Port des Rechners", port

während 1:

Daten, Adresse = s.recvfrom (1024)

Daten drucken

Dies mag nicht viel erscheinen, aber so wird es tatsächlich geschaffen. Man kann hier jeden Port benutzen. Ich habe gerade einen zufälligen als 2924 gewählt. Der UDP-Server benötigt einen offenen Port, um eingehende Verbindungen zu senden und zu empfangen. Es wird kein Port abgehört oder Verbindungen oder Anfragen akzeptiert. Es passiert einfach ohne Authentifizierung. Versuchen Sie, den obigen Server auf einem Terminal auszuführen, und sehen Sie, wie er funktioniert.

Dies ist nur ein einfacher UDP-Server, den wir erstellt haben. Machen wir es etwas interessanter und auch etwas komplizierter:

"Dies ist ein einfacher UDP-Socket-Server" import socketimport sys

HOST = "" # Hier kann man alle verfügbaren Schnittstellen ausprobieren

PORT = 2924 # Beliebiger Port, der in Windows- oder Linux-Distributionen nicht standardmäßig verwendet wird

# Kodierung des UDP-Sockets

Versuchen :

s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM)

print "Socket initialisiert"

außer socket.error, msg:

print “Socket-Erstellung fehlgeschlagen. Folgender Fehler ist aufgetreten: ”+ str (msg (0)) + 'Nachricht' + msg (1)

sys.exit ()

# Jetzt müssen wir diesen Socket an den obigen Host und Port binden

Versuchen:

an bind ((HOST, PORT))

außer socket.error, msg:

print “Binding Socket failed. Folgender Fehler hat die Bindung unterbrochen: ”+ str (msg (0)) + 'Message' + msg (1)

sys.exit ()

print 'Sockelbindung abgeschlossen'

#Bewahren Sie die hergestellte Verbindung

während 1:

# Daten vom Client mit variablen Daten und Adressen erfassen

d = s.recvfrom (1024)

data = d (0)

Adresse = d (1)

wenn nicht daten:

brechen

reply = 'OK …' + Daten

an sendto (antworten, adresse)

print 'Token message (' + address (0) + ':' + str (address (1)) + ') -' + data.strip ()

s.close ()

Führen Sie das obige Programm aus und Sie starten einen UDP-Server auf dem Port 2924. Glückwunsch, Sie haben erfolgreich einen Socket in Python erstellt. Beachten Sie außerdem, dass ein UDP-Server im Gegensatz zum TCP-Server eine Vielzahl von Clients verarbeiten kann. Der Hauptgrund dafür ist, dass auf einem UDP-Server keine feste Konnektivität besteht, wie dies bei einem TCP-Server der Fall ist.

Empfohlene Kurse

  • Zertifizierungskurs in Ruby Debugging
  • PHP MySQL Kurs
  • Zertifizierungskurs für VB.NET-Programmierung
  • Schließen Sie die ITIL Foundation-Schulung ab
  • UDP-Client-Programmierung

Nachdem wir einen UDP-Server erfolgreich erstellt haben, benötigen wir einen Client, der eine ordnungsgemäße Verbindung zu ihm herstellt, damit wir wissen, wie er funktioniert. Lassen Sie uns also daran arbeiten, einen richtigen UDP-Client in Python zu erstellen. Dieser Client stellt eine Verbindung zu unserem oben erstellten UDP-Server her:

"Erstellen eines einfachen UDP-Clients unter Verwendung von Sockets" importieren socketimport sys

# Erstellen eines UDP-Sockets

Versuchen:

s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM)

außer socket.error:

print 'Socket-Erstellung fehlgeschlagen'

sys.exit ()

host = '127.0.0.1'; #Sie können auch versuchen, localhost insead dieser IP zu verwenden. Beide sind identisch.

port = 2924;

während (1):

msg = raw_input ('Geben Sie eine Nachricht ein, die an den Server gesendet werden soll:')

Versuchen :

#Nun müssen wir die Saiten einstellen

an sendto (msg, (host, port))

# Jetzt müssen wir Daten und Adressen vom Kunden mit Hilfe von Daten und Adressen erhalten

d = s.recvfrom (1024)

reply = d (0)

Adresse = d (1)

print 'Antwort vom Server ist:' + Antwort

außer socket.error, msg:

print 'Folgender Fehler ist aufgetreten:' + str (msg (0)) + 'Nachricht' + msg (1)

sys.exit ()

Jep. Das Erstellen eines UDP-Clients in der Python Socket-Programmierung ist viel einfacher als das Erstellen eines UDP-Servers. Aber so geht es. Ich glaube nicht, dass ich irgendetwas aus dem obigen Code erklären müsste, da ich bereits alle erforderlichen Dinge in den # tag-Kommentaren erwähnt habe. Stellen Sie einfach sicher, dass die IP-Adresse und der von Ihnen eingegebene Port korrekt sind und Ihre Firewall die Verbindung nicht blockiert.

  • TCP-Socket-Programmierung

Nachdem wir nun gelernt haben, einen UDP-Client und -Server zu erstellen, werfen wir einen Blick auf die Programmierung von TCP-Sockets. Wir werden dieselbe socket.socket-Funktion verwenden, um hier einen TCP-Socket zu erstellen.

Importsocket # Import des Modulsockets aus Python-Bibliotheken # Erstellen Sie ein AF_INET und streamen Sie socketss = socket.socket (socket.AF_INET, socket.SOCK_STREAM). print 'Socket Creation Successful'

In diesem Fall wird AF_INET für die IPv4-Adressverbindung verwendet, und sock stream ist ein TCP-orientiertes Protokoll. Dies ist ein einfacher TCP-Socket, den wir erstellt haben. Jetzt werden wir eine erweiterte Version derselben Sache erstellen. Wir werden auch hier Ausnahmen auslösen, so wie wir es beim Erstellen von UDP-Servern und -Clients geworfen haben, damit wir im Falle eines Ausfalls der Konnektivität wissen, wo sich das eigentliche Programm befindet. Socket.error wird verwendet, um alle diese Fehler zu behandeln, die denen der UDP-Programmierung ähneln.

Erstellen Sie jetzt einen Socket mit der oben genannten Fehlerbehandlung und stellen Sie eine Verbindung zum Host facebook.com her. So muss es gemacht werden:

Importieren Sie den Socket #importieren des Socket-Modulimport-Systems: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

außer socket.error, msg:

print 'Socket-Erstellung fehlgeschlagen. Folgender Fehler ist aufgetreten: '+ str (msg (0)) +', Fehlermeldung: '+ msg (1)

sys.exit ();

print 'Socket-Erstellung erfolgreich'

host = 'www.facebook.com'

port = 2924

Versuchen:

remote_ip = socket.gethostbyname (host)

außer socket.gaierror:

print 'Ungültiger Hostname. Verlassen … '

sys.exit ()

print ”+ host + IP address 'ist' + remote_ip

an connect ((remote_ip, port))

print 'Socket Verbunden mit' + host + 'on ip' + remote_ip

Das ist jetzt genug, wenn wir nur eine Verbindung herstellen müssen. Aber das ist nicht unser Ziel. Wir wollen eine Verbindung herstellen, über die wir an beiden Enden auch Daten senden und empfangen können. Wir können Daten mit der Sendall-Funktion senden. Also hier ist, wie es geht:

Importieren Sie den Socket #importieren des Socket-Modulimport-Systems: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

außer socket.error, msg:

print 'Socket-Erstellung fehlgeschlagen. Folgender Fehler ist aufgetreten: '+ str (msg (0)) +', Fehlermeldung: '+ msg (1)

sys.exit ();

print 'Socket-Erstellung erfolgreich'

host = 'www.facebook.com'

port = 2924

Versuchen:

remote_ip = socket.gethostbyname (host)

außer socket.gaierror:

print 'Ungültiger Hostname. Verlassen … '

sys.exit ()

print ”+ host + IP address 'ist' + remote_ip

an connect ((remote_ip, port))

print 'Socket Verbunden mit' + host + 'on ip' + remote_ip

#Übertragen von Daten mit der Sendall-Funktion

message = "GET / HTTP / 1.1 \ r \ n \ r \ n"

Versuchen :

an alle (Nachricht)

außer socket.error:

#Senden fehlgeschlagen

'Übertragungsfehler' drucken

sys.exit ()

print 'Nachrichtenstatus: Gesendet'

Nachdem wir eine erfolgreiche Verbindung hergestellt haben und die Daten auch senden können, sehen wir uns an, wie wir die Daten insgesamt empfangen können. So läuft es:

Importieren Sie den Socket #importieren des Socket-Modulimport-Systems: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

außer socket.error, msg:

print 'Socket-Erstellung fehlgeschlagen. Folgender Fehler ist aufgetreten: '+ str (msg (0)) +', Fehlermeldung: '+ msg (1)

sys.exit ();

print 'Socket-Erstellung erfolgreich'

host = 'www.facebook.com'

port = 2924

Versuchen:

remote_ip = socket.gethostbyname (host)

außer socket.gaierror:

print 'Ungültiger Hostname. Verlassen … '

sys.exit ()

print ”+ host + IP address 'ist' + remote_ip

an connect ((remote_ip, port))

print 'Socket Verbunden mit' + host + 'on ip' + remote_ip

#Übertragen von Daten mit der Sendall-Funktion

message = "GET / HTTP / 1.1 \ r \ n \ r \ n"

Versuchen :

an alle (Nachricht)

außer socket.error:

#Senden fehlgeschlagen

'Übertragungsfehler' drucken

sys.exit ()

print 'Nachrichtenstatus: Gesendet'

#Um Daten zu empfangen, verwenden wir die Funktion recv, um dies zu erreichen

reply = s.recv (4096)

Antwort drucken

Als letztes müssen wir den Socket schließen, was wir mit folgendem Code tun können:

s.close ()

Und zum Schluss der verbindliche Teil. Wir können die Funktion bind verwenden, um Sockets mit IP-Adressen und Ports zu verbinden.

import socketimport sysHOST = ”#Dies ist der gleiche Weg wie im UDP-ProtokollPORT = 2924 # -Port, um auf Daten zuzugreifen.

s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

print 'Socket-Erstellung erfolgreich'

Versuchen:

an bind ((HOST, PORT))

außer socket.error, msg:

print 'Bindung fehlgeschlagen. Folgender Fehler ist aufgetreten '+ str (msg (0)) +' Nachricht '+ msg (1)

sys.exit ()

print 'Sockelbindung erfolgreich'

Jetzt müssen wir eingehende Verbindungen abhören, wenn der Server eine Verbindung herstellen soll. Dies kann mit dem folgenden einfachen Befehl erfolgen:

s.listen (10) print 'Listener started'

Und schließlich müssen wir einen Socket erstellen, um diese Verbindungen zu akzeptieren:

Importieren Sie Socketimport sysHOST = ”PORT = 2924

s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

print 'Socket-Erstellung erfolgreich'

Versuchen:

an bind ((HOST, PORT))

außer socket.error, msg:

print 'Bindung fehlgeschlagen. Schleppfehler aufgetreten '+ str (msg (0)) +' Nachricht '+ msg (1)

sys.exit ()

print 'Sockelbindung erfolgreich'

s.listen (10)

print 'Listener gestartet'

#Anschlüsse annehmen

conn, addr = s.accept ()

#Angebundene Client-Informationen bereitstellen

print 'Verbindung hergestellt mit' + addr (0) + ':' + str (addr (1))

Dazu gehört eigentlich noch viel mehr. Wir können auch Codes für Handler und andere Dinge schreiben. Aber ich denke, das wäre es für jetzt. Stellen Sie sicher, dass Sie über die richtigen Grundlagen verfügen. Danach sind die restlichen Teile nur noch ein Kinderspiel.

Erste Bildquelle: pixabay.com

In Verbindung stehende Artikel:-

In den folgenden Artikeln erfahren Sie mehr über die Python Socket-Programmierung. Gehen Sie einfach über den Link.

  1. 25 erstaunlichsten Fragen und Antworten zum Python-Interview
  2. Karriere in Python
  3. Was sind die Vor- und Nachteile von Python?
  4. Wichtiger Unterschied Python vs. Ruby Performance
  5. Einführung in die Socket-Programmierung in PHP
  6. Socket-Programmierung in Java | Socket-Klassenmethode