GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Gewusst wie:Socket-Programmierung in Python

Einführung

Netzwerk- und Kommunikationsprogrammierung sind besonders leistungsstarke Anwendungen jeder Programmiersprache. Heutzutage ist es viel üblicher, dass Computer miteinander (oder mit einem ganzen Netzwerk wie dem Internet) kommunizieren, als dass eine Maschine alleine handelt, und genau zu wissen, wie diese Kommunikation stattfindet, ist eine wichtige Fähigkeit für jeden Programmierer. Wenn Sie ein Python-Fan sind, wissen Sie vielleicht, dass Python mehrere vollständige Bibliotheken hat, die entworfen wurden, um die Netzwerkprogrammierung einfach zu machen.
.

Voraussetzungen

  • Jede Version von Python (Siehe unsere Anleitung zur Installation von Python 2.7 in Centos)
  • Grundlegendes Verständnis von Python

Steckdosen

Eine der grundlegendsten – und nützlichsten – Importbibliotheken ist socket Bibliothek. Es erlaubt dem Programmierer, Netzwerkverbindungen zu definieren, zu erstellen, zu verwenden und zu zerstören, die als Sockets bekannt sind .

Also, was genau ist eine Steckdose? In Netzwerkbegriffen ist ein Socket der Endpunkt einer Verbindung, definiert durch eine IP-Adresse und eine Portnummer. Eine Verbindung verwendet ein Socket-Paar:Quelle und Ziel.

Programme verwenden normalerweise Sockets, um zwei Computern die Kommunikation zu ermöglichen. Sockets können auch verwendet werden, um Daten zwischen verschiedenen Anwendungen oder sogar verschiedenen Teilen desselben Programms zu übertragen. Wir können zeigen, wie ein Socket entweder mit zwei Anwendungen oder zwei getrennten Teilen einer laufenden Anwendung funktioniert:einem Serverteil, der auf Verbindungen wartet, und einem Clientteil, der versucht, eine Verbindung zu einem Server herzustellen. Wenn Ihr Computer beispielsweise eine Webseite anfordert, öffnet er einen Socket, bindet ihn normalerweise an Port 80 (für HTTP) und stellt eine Verbindung zu einem Webserver her, wobei dieselbe Port- und Socket-ID verwendet wird. Die gesamte zugehörige Kommunikation läuft über diesen Endpunkt. Wenn die Kommunikation beendet ist, schließt der Client den Socket und die Verbindung, an die er gebunden ist.

Die Socket-Bibliothek in Python ist gut entwickelt und einfach zu bedienen. Um die Bibliothek zu verwenden, setzen Sie import socket zu Beginn Ihres Programms. Dieser Befehl gibt Ihrem Programm Zugriff auf alle enthaltenen Funktionen der Socket-Bibliothek, wie z. B. socket() (ein neues Socket-Objekt erstellen), socketpair() (ein Paar neuer Socket-Objekte erstellen) und gethostbyname() (einen Hostnamen seiner IP-Adresse zuordnen), um nur einige zu nennen.
.

Experimentieren mit der Socket-Bibliothek

Um mit Sockets auf unserem lokalen Computer zu experimentieren, schreiben wir ein Python-Skript, um eine Serveranwendung zu erstellen, die einen offenen Socket erstellt. Dann führen wir diesen Code aus und stellen in einem anderen Terminalfenster eine Telnet-Verbindung zu unserem lokalen Computer (auf localhost) her, indem wir den Port verwenden, den wir im Serverskript geöffnet haben.

Beginnen wir mit einem Skript, das wir server.py nennen . Dieses Programm öffnet einen Socket, bindet ihn an einen Port und ein Protokoll und wartet dann auf Verbindungen.

import socket # (1)  
host = '' # (2)  
port = 1234 # (3)  

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # (4)  
s.bind((host, port)) # (5)  

print 'Socket created' # (6)  
s.listen(10) # (7)  
print 'Socket listening' # (8)  

conn, addr = s.accept() # (9)  

print 'Connected with ' + addr[0] + ':' + str(addr[1]) # (10)  

Speichern Sie diese Datei als server.py . Navigieren Sie in einem Terminalfenster (oder an der Eingabeaufforderung, wenn Sie Windows verwenden) zum Speicherort Ihrer Datei und führen Sie sie aus.

python server.py

Lassen Sie es laufen und öffnen Sie ein zweites Terminalfenster. Initiieren Sie in diesem Fenster eine Telnet-Verbindung zum localhost auf Port 1234.

telnet localhost 1234

Sobald die Verbindung hergestellt ist, sollten Sie sehen, dass das ursprüngliche Terminalfenster „Verbunden mit 127.0.0.1:60426“ oder etwas Ähnliches ausgibt, während Ihr Client-Fenster kurz „Verbunden mit lokalem Host“ anzeigt, bevor die Verbindung beendet wird.
.

Was der Socket-Code macht

Also, was ist hier los? Schauen wir uns jede Zeile an:

Zeile (1) importiert den socket Bibliothek und stellt sie zur Nutzung zur Verfügung. Die Zeilen (2) und (3) setzen Variablen für host und port , beziehungsweise. Der leere host Variable (das ist übrigens ein leerer String, der von einfachen Anführungszeichen umgeben ist, KEIN doppeltes Anführungszeichen) bedeutet, dass die Serveranwendung auf allen verfügbaren Schnittstellen lauscht, einschließlich localhost, das ist dasjenige, das wir verwenden, um eine Verbindung herzustellen.

Zeile (4) erstellt den Socket selbst mit zwei Parametern. Der erste Parameter, AF_INET , bedeutet, dass wir IPv4-Adressen verwenden (im Gegensatz zu IPv6-Adressen). Der zweite Parameter, SOCK_STREAM , bedeutet, dass dieser Socket TCP-Pakete verwendet (UDP-Verkehr verwendet den Typ SOCK_DGRAM und funktioniert ein bisschen anders – aber das würde den Rahmen dieses Artikels sprengen). Zeile (5) bindet den von uns erstellten Socket an den (host, port) Tupel.

Zeile (7) weist das Programm an, auf Verbindungen zu dem in Zeile (5) gebundenen Socket zu lauschen. Die 10 Der Parameter gibt an, dass der Server bis zu 10 Verbindungen akzeptiert, bevor er einen Client ablehnt.

Zeile (9) weist der Verbindung Variablen zu, sobald der Server eine Verbindung akzeptiert. Zeile (10) gibt die IP-Adresse und Portnummer des Clients aus, der die Verbindung zum Server hergestellt hat.
.

Socket offen halten

Als wir diesen Code getestet haben, haben wir gesehen, dass der Server die Verbindung sofort beendet hat, was nicht besonders hilfreich ist. Damit wir die über die Verbindung hin und her übertragenen Daten sehen können, fügen wir unserer server.py vier Codezeilen hinzu Programm.

data = conn.recv(1024) # 11  
conn.sendall(data) # 12  
conn.close() # 13  
s.close() # 14  

Nochmals, wenn Sie diesen Code in einem Terminalfenster ausführen und sich dann (von einem anderen Terminal) mit telnet localhost 1234 verbinden , stellen Sie eine Verbindung zu localhost her, aber dieses Mal bleibt die Verbindung offen. Geben Sie ein Wort in das Telnet-Fenster ein und drücken Sie dann Return; das Wort wird auf denselben Bildschirm zurückgesendet, und dann wird die Verbindung geschlossen.

In Zeile (11) die data Variable speichert die über die Verbindung empfangenen Daten.

Zeile (12) sendet diese Daten über die Verbindung zurück zum Client – ​​mit anderen Worten als Echo.

Schließlich üben die Zeilen (13) und (14) ein wenig Haushalt, indem sie die Verbindung schließen und den Socket zerstören – nie eine schlechte Idee, besonders wenn eine Socket-basierte Anwendung codiert wird, die in die Wildnis entlassen wird.
.

Schlussfolgerung

Dieses Skript ist ein sehr einfaches Beispiel dafür, wie eine Netzwerkverbindung mit Pythons socket erstellt wird Modul, kommunizieren Sie über die Verbindung und schließen Sie sie dann wieder. Während eine ausgewachsene Anwendung viel komplizierter sein wird, bleibt die grundlegende Kommunikationsstruktur – und die Theorie dahinter – gleich.

Wir hoffen, dass Ihnen dieses Tutorial gefallen hat und Sie genug gelernt haben, um mit der Arbeit mit Sockets in Python zu beginnen. Schauen Sie auf jeden Fall wieder vorbei, um weitere Anleitungen zu erhalten, und sehen Sie sich unsere zuverlässigen VPS-Hosting-Lösungen an.
.
.


Linux
  1. So installieren Sie Python unter Linux

  2. So installieren Sie NumPy

  3. So aktualisieren Sie Python auf 3.9

  4. So installieren Sie Python 3 unter Ubuntu 18.04 oder 20.04

  5. So installieren Sie Python 3 unter Windows 10

So installieren Sie Python 3.8 unter Debian 10

So überprüfen Sie die Python-Version

So installieren Sie Python 3.9 unter Debian 11

So installieren Sie Python 3.11 auf Ubuntu 20.04

So installieren Sie Python 3.9 unter Debian 11

So führen Sie ein Python-Skript in PHP aus