Python - Netzwerkprogrammierung
Python bietet zwei Zugriffsebenen auf Netzwerkdienste. Auf niedriger Ebene können Sie auf die grundlegende Socket-Unterstützung des zugrunde liegenden Betriebssystems zugreifen, mit der Sie Clients und Server sowohl für verbindungsorientierte als auch für verbindungslose Protokolle implementieren können.
Python verfügt auch über Bibliotheken, die übergeordneten Zugriff auf bestimmte Netzwerkprotokolle auf Anwendungsebene wie FTP, HTTP usw. bieten.
In diesem Kapitel erfahren Sie mehr über das bekannteste Konzept in Networking - Socket Programming.
Was sind Steckdosen?
Sockets sind die Endpunkte eines bidirektionalen Kommunikationskanals. Sockets können innerhalb eines Prozesses, zwischen Prozessen auf demselben Computer oder zwischen Prozessen auf verschiedenen Kontinenten kommunizieren.
Sockets können über verschiedene Kanaltypen implementiert werden: Unix-Domain-Sockets, TCP, UDP usw. Die Socket- Bibliothek bietet spezifische Klassen für die Abwicklung der allgemeinen Transporte sowie eine generische Schnittstelle für die Abwicklung des Restes.
Steckdosen haben ihren eigenen Wortschatz -
Sr.Nr. | Begriff & Beschreibung |
---|---|
1 | Domain Die Protokollfamilie, die als Transportmechanismus verwendet wird. Diese Werte sind Konstanten wie AF_INET, PF_INET, PF_UNIX, PF_X25 usw. |
2 | type Die Art der Kommunikation zwischen den beiden Endpunkten, normalerweise SOCK_STREAM für verbindungsorientierte Protokolle und SOCK_DGRAM für verbindungslose Protokolle. |
3 | protocol Typischerweise Null, kann dies verwendet werden, um eine Variante eines Protokolls innerhalb einer Domäne und eines Typs zu identifizieren. |
4 | hostname Die Kennung einer Netzwerkschnittstelle -
|
5 | port Jeder Server wartet auf Clients, die einen oder mehrere Ports anrufen. Ein Port kann eine Fixnum-Portnummer, eine Zeichenfolge mit einer Portnummer oder der Name eines Dienstes sein. |
Das Socket - Modul
Um einen Socket zu erstellen, müssen Sie die Funktion socket.socket () verwenden, die im Socket- Modul verfügbar ist und die allgemeine Syntax hat:
s = socket.socket (socket_family, socket_type, protocol=0)
Hier ist die Beschreibung der Parameter -
socket_family - Dies ist entweder AF_UNIX oder AF_INET, wie zuvor erläutert.
socket_type - Dies ist entweder SOCK_STREAM oder SOCK_DGRAM.
protocol - Dies wird normalerweise weggelassen und ist standardmäßig 0.
Sobald Sie ein Socket- Objekt haben, können Sie die erforderlichen Funktionen verwenden, um Ihr Client- oder Serverprogramm zu erstellen. Es folgt die Liste der erforderlichen Funktionen -
Server-Socket-Methoden
Sr.Nr. | Methode & Beschreibung |
---|---|
1 | s.bind() Diese Methode bindet die Adresse (Hostname, Portnummernpaar) an den Socket. |
2 | s.listen() Diese Methode richtet den TCP-Listener ein und startet ihn. |
3 | s.accept() Diese akzeptieren passiv die TCP-Client-Verbindung und warten, bis die Verbindung eintrifft (Blockierung). |
Client-Socket-Methoden
Sr.Nr. | Methode & Beschreibung |
---|---|
1 | s.connect() Diese Methode initiiert aktiv die TCP-Serververbindung. |
Allgemeine Socket-Methoden
Sr.Nr. | Methode & Beschreibung |
---|---|
1 | s.recv() Diese Methode empfängt eine TCP-Nachricht |
2 | s.send() Diese Methode überträgt eine TCP-Nachricht |
3 | s.recvfrom() Diese Methode empfängt eine UDP-Nachricht |
4 | s.sendto() Diese Methode überträgt UDP-Nachrichten |
5 | s.close() Diese Methode schließt den Socket |
6 | socket.gethostname() Gibt den Hostnamen zurück. |
Ein einfacher Server
Zum Schreiben von Internet-Servern verwenden wir die socketFunktion im Socket-Modul verfügbar, um ein Socket-Objekt zu erstellen. Ein Socket-Objekt wird dann verwendet, um andere Funktionen zum Einrichten eines Socket-Servers aufzurufen.
Ruf jetzt an bind(hostname, port)Funktion zum Angeben eines Ports für Ihren Dienst auf dem angegebenen Host.
Rufen Sie als Nächstes die Methode accept des zurückgegebenen Objekts auf. Diese Methode wartet, bis ein Client eine Verbindung zu dem von Ihnen angegebenen Port herstellt, und gibt dann ein Verbindungsobjekt zurück , das die Verbindung zu diesem Client darstellt.
#!/usr/bin/python # This is server.py file
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.bind((host, port)) # Bind to the port
s.listen(5) # Now wait for client connection.
while True:
c, addr = s.accept() # Establish connection with client.
print 'Got connection from', addr
c.send('Thank you for connecting')
c.close() # Close the connection
Ein einfacher Client
Schreiben wir ein sehr einfaches Client-Programm, das eine Verbindung zu einem bestimmten Port 12345 und einem bestimmten Host herstellt. Dies ist sehr einfach, um einen Socket-Client mit der Socket- Modul-Funktion von Python zu erstellen .
Das socket.connect(hosname, port )Öffnet eine TCP-Verbindung zum Hostnamen am Port . Sobald Sie einen Socket geöffnet haben, können Sie wie jedes E / A-Objekt daraus lesen. Wenn Sie fertig sind, denken Sie daran, es zu schließen, als würden Sie eine Datei schließen.
Der folgende Code ist ein sehr einfacher Client, der eine Verbindung zu einem bestimmten Host und Port herstellt, alle verfügbaren Daten vom Socket liest und dann beendet -
#!/usr/bin/python # This is client.py file
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.connect((host, port))
print s.recv(1024)
s.close() # Close the socket when done
Führen Sie nun diese server.py im Hintergrund und dann über client.py aus, um das Ergebnis anzuzeigen.
# Following would start a server in background.
$ python server.py &
# Once server is started run client as follows:
$ python client.py
Dies würde folgendes Ergebnis liefern -
Got connection from ('127.0.0.1', 48437)
Thank you for connecting
Python-Internetmodule
Eine Liste einiger wichtiger Module in der Python-Netzwerk- / Internetprogrammierung.
Protokoll | Gemeinsame Funktion | Port Nr | Python-Modul |
---|---|---|---|
HTTP | Webseiten | 80 | httplib, urllib, xmlrpclib |
NNTP | Usenet-Nachrichten | 119 | nntplib |
FTP | Dateiübertragungen | 20 | ftplib, urllib |
SMTP | Email schicken | 25 | smtplib |
POP3 | E-Mail abrufen | 110 | Poplib |
IMAP4 | E-Mail abrufen | 143 | imaplib |
Telnet | Befehlszeilen | 23 | Telnetlib |
Gopher | Dokumentübertragungen | 70 | Gopherlib, Urllib |
Bitte überprüfen Sie alle oben genannten Bibliotheken, um mit den Protokollen FTP, SMTP, POP und IMAP zu arbeiten.
Weitere Lesungen
Dies war ein schneller Einstieg in die Socket-Programmierung. Es ist ein großes Thema. Es wird empfohlen, über den folgenden Link weitere Details zu erfahren:
Unix-Socket-Programmierung .
Python Socket Library und Module .