Python - Netzwerkprogrammierung
Vorherige SeiteNächste Seite
Python bietet zwei Zugriffsebenen auf Netzwerkdienste. Auf einer niedrigen Ebene können Sie auf die grundlegende Socket-Unterstützung im zugrunde liegenden Betriebssystem zugreifen, wodurch Sie Clients und Server sowohl für verbindungsorientierte als auch für verbindungslose Protokolle implementieren können.
Python verfügt auch über Bibliotheken, die einen übergeordneten Zugriff auf bestimmte Netzwerkprotokolle auf Anwendungsebene wie FTP, HTTP usw. bieten.
Dieses Kapitel vermittelt Ihnen ein Verständnis für das bekannteste Konzept der Netzwerktechnik - Socket-Programmierung.
Was ist Sockets?
Sockets sind die Endpunkte eines bidirektionalen Kommunikationskanals. Sockets können innerhalb eines Prozesses, zwischen Prozessen auf derselben Maschine oder zwischen Prozessen auf verschiedenen Kontinenten kommunizieren.
Sockets können über eine Reihe unterschiedlicher Kanaltypen implementiert werden:Unix-Domain-Sockets, TCP, UDP und so weiter. Die Buchse Die Bibliothek bietet spezifische Klassen für die Handhabung der üblichen Transporte sowie eine generische Schnittstelle für die Handhabung des Rests.
Sockets haben ihr eigenes Vokabular −
Sr.No. | Begriff &Beschreibung |
---|---|
1 | Domäne Die Protokollfamilie, die als Transportmechanismus verwendet wird. Diese Werte sind Konstanten wie AF_INET, PF_INET, PF_UNIX, PF_X25 usw. |
2 | Typ Die Art der Kommunikation zwischen den beiden Endpunkten, typischerweise SOCK_STREAM für verbindungsorientierte Protokolle und SOCK_DGRAM für verbindungslose Protokolle. |
3 | Protokoll Normalerweise 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. |
Die Buchse Modul
Um einen Socket zu erstellen, müssen Sie socket.socket() verwenden Funktion im Socket verfügbar Modul, das die allgemeine Syntax −
hats = 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 bereits erklärt.
-
socket_type − Dies ist entweder SOCK_STREAM oder SOCK_DGRAM.
-
Protokoll − Dies wird normalerweise weggelassen und ist standardmäßig 0.
Sobald Sie Socket haben -Objekt, dann 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.No. | Methode &Beschreibung |
---|---|
1 | s.bind() Diese Methode bindet Adresse (Hostname, Portnummernpaar) an Socket. |
2 | s.listen() Diese Methode richtet den TCP-Listener ein und startet ihn. |
3 | s.accept() Dies akzeptiert passiv die TCP-Client-Verbindung und wartet, bis die Verbindung ankommt (blockiert). |
Client-Socket-Methoden
Sr.No. | Methode &Beschreibung |
---|---|
1 | s.connect() Diese Methode initiiert aktiv die TCP-Serververbindung. |
Allgemeine Socket-Methoden
Sr.No. | 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 eine UDP-Nachricht |
5 | s.close() Diese Methode schließt Socket |
6 | socket.gethostname() Gibt den Hostnamen zurück. |
Ein einfacher Server
Um Internetserver zu schreiben, verwenden wir den Socket im Socket-Modul verfügbare Funktion zum Erstellen eines Socket-Objekts. Ein Socket-Objekt wird dann verwendet, um andere Funktionen zum Einrichten eines Socket-Servers aufzurufen.
Rufen Sie nun bind(hostname, port) auf Funktion, um einen Port anzugeben für Ihren Dienst auf dem angegebenen Host.
Rufen Sie als Nächstes accept auf Methode des zurückgegebenen Objekts. Diese Methode wartet, bis sich ein Client mit dem von Ihnen angegebenen Port verbindet, und gibt dann eine Verbindung zurück Objekt, 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
Lassen Sie uns ein sehr einfaches Client-Programm schreiben, das eine Verbindung zu einem gegebenen Port 12345 und einem gegebenen Host öffnet. Es ist sehr einfach, einen Socket-Client mit Pythons socket zu erstellen Modulfunktion.
Die socket.connect(hosname, port ) öffnet eine TCP-Verbindung zu hostname am Hafen . Sobald Sie einen Socket geöffnet haben, können Sie ihn wie jedes andere IO-Objekt lesen. Wenn Sie fertig sind, denken Sie daran, es zu schließen, wie Sie eine Datei schließen würden.
Der folgende Code ist ein sehr einfacher Client, der sich mit einem gegebenen Host und Port verbindet, alle verfügbaren Daten aus dem 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 aus und führen Sie sie dann oberhalb von client.py aus, um das Ergebnis zu sehen.
# 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 erzeugen −
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 | Portnummer | Python-Modul |
---|---|---|---|
HTTP | Webseiten | 80 | httplib, urllib, xmlrpclib |
NNTP | Usenet-Neuigkeiten | 119 | nntplib |
FTP | Dateiübertragungen | 20 | ftplib, urllib |
SMTP | E-Mail senden | 25 | smtplib |
POP3 | E-Mails abrufen | 110 | poplib |
IMAP4 | E-Mails abrufen | 143 | imaplib |
Telnet | Befehlszeilen | 23 | telnetlib |
Gopher | Dokumentenübertragungen | 70 | gopherlib, urllib |
Bitte überprüfen Sie alle oben genannten Bibliotheken, um mit FTP-, SMTP-, POP- und IMAP-Protokollen zu arbeiten.
Weiterführende Literatur
Dies war ein schneller Einstieg in die Socket-Programmierung. Es ist ein riesiges Thema. Es wird empfohlen, den folgenden Link zu durchlaufen, um weitere Details zu finden −
-
Unix-Socket-Programmierung.
-
Python-Socket-Bibliothek und -Module.
Python