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 -

  • Eine Zeichenfolge, die ein Hostname, eine gepunktete Quad-Adresse oder eine IPV6-Adresse in Doppelpunkt- (und möglicherweise Punkt-) Schreibweise sein kann

  • Eine Zeichenfolge "<broadcast>", die eine INADDR_BROADCAST-Adresse angibt.

  • Eine Zeichenfolge mit der Länge Null, die INADDR_ANY oder angibt

  • Eine Ganzzahl, die als Binäradresse in der Reihenfolge der Hostbytes interpretiert wird.

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 .