Python - Netwerkprogrammering
Python biedt twee toegangsniveaus tot netwerkservices. Op een laag niveau heeft u toegang tot de basissocketondersteuning in het onderliggende besturingssysteem, waarmee u clients en servers kunt implementeren voor zowel verbindingsgerichte als verbindingsloze protocollen.
Python heeft ook bibliotheken die toegang op een hoger niveau bieden tot specifieke netwerkprotocollen op applicatieniveau, zoals FTP, HTTP, enzovoort.
Dit hoofdstuk geeft u inzicht in het meest bekende concept in netwerken - Socket Programming.
Wat is sockets?
Sockets zijn de eindpunten van een bidirectioneel communicatiekanaal. Sockets kunnen communiceren binnen een proces, tussen processen op dezelfde machine of tussen processen op verschillende continenten.
Sockets kunnen worden geïmplementeerd via een aantal verschillende kanaaltypen:Unix-domeinsockets, TCP, UDP, enzovoort. De aansluiting bibliotheek biedt specifieke klassen voor het afhandelen van de gemeenschappelijke transporten en een generieke interface voor het afhandelen van de rest.
Sockets hebben hun eigen woordenschat −
Sr.nr. | Termijn en beschrijving |
---|---|
1 | Domein De familie van protocollen die als transportmechanisme wordt gebruikt. Deze waarden zijn constanten zoals AF_INET, PF_INET, PF_UNIX, PF_X25, enzovoort. |
2 | type Het type communicatie tussen de twee eindpunten, meestal SOCK_STREAM voor verbindingsgerichte protocollen en SOCK_DGRAM voor verbindingsloze protocollen. |
3 | protocol Meestal nul, dit kan worden gebruikt om een variant van een protocol binnen een domein en type te identificeren. |
4 | hostnaam De identifier van een netwerkinterface −
|
5 | poort Elke server luistert naar clients die een of meer poorten aanroepen. Een poort kan een Fixnum-poortnummer zijn, een string met een poortnummer of de naam van een dienst. |
De aansluiting Module
Om een socket te maken, moet u de socket.socket() . gebruiken functie beschikbaar in socket module, die de algemene syntaxis heeft −
s = socket.socket (socket_family, socket_type, protocol=0)
Hier is de beschrijving van de parameters −
-
socket_family − Dit is AF_UNIX of AF_INET, zoals eerder uitgelegd.
-
socket_type − Dit is SOCK_STREAM of SOCK_DGRAM.
-
protocol − Dit wordt meestal weggelaten en staat standaard op 0.
Zodra je socket hebt object, dan kunt u de vereiste functies gebruiken om uw client- of serverprogramma te maken. Hieronder volgt de lijst met vereiste functies −
Server Socket-methoden
Sr.nr. | Methode en beschrijving |
---|---|
1 | s.bind() Deze methode bindt adres (hostnaam, poortnummerpaar) aan socket. |
2 | s.listen() Deze methode stelt de TCP-listener in en start deze. |
3 | s.accept() Dit accepteert passief de TCP-clientverbinding, wachtend tot de verbinding arriveert (blokkering). |
Client Socket-methoden
Sr.nr. | Methode en beschrijving |
---|---|
1 | s.connect() Deze methode initieert actief de TCP-serververbinding. |
Algemene socketmethoden
Sr.nr. | Methode en beschrijving |
---|---|
1 | s.recv() Deze methode ontvangt een TCP-bericht |
2 | s.send() Deze methode verzendt een TCP-bericht |
3 | s.recvfrom() Deze methode ontvangt een UDP-bericht |
4 | s.sendto() Deze methode verzendt een UDP-bericht |
5 | s.close() Deze methode sluit socket |
6 | socket.gethostname() Retourneert de hostnaam. |
Een eenvoudige server
Om internetservers te schrijven, gebruiken we de socket functie beschikbaar in socketmodule om een socketobject te maken. Een socket-object wordt dan gebruikt om andere functies aan te roepen om een socketserver in te stellen.
Bel nu bind(hostnaam, poort) functie om een poort te specificeren voor uw service op de opgegeven host.
Bel vervolgens de accept methode van het geretourneerde object. Deze methode wacht totdat een client verbinding maakt met de poort die u hebt opgegeven, en retourneert vervolgens een verbinding object dat de verbinding met die client vertegenwoordigt.
#!/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
Een eenvoudige klant
Laten we een heel eenvoudig clientprogramma schrijven dat een verbinding opent naar een bepaalde poort 12345 en een bepaalde host. Dit is heel eenvoudig om een socket-client te maken met behulp van Python's socket modulefunctie.
De socket.connect(hosname, port ) opent een TCP-verbinding met hostnaam op de poort . Zodra u een socket open heeft, kunt u ervan lezen zoals elk IO-object. Als u klaar bent, vergeet dan niet om het te sluiten, zoals u een bestand zou sluiten.
De volgende code is een zeer eenvoudige client die verbinding maakt met een bepaalde host en poort, alle beschikbare gegevens van de socket leest en vervolgens afsluit −
#!/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
Voer nu deze server.py op de achtergrond uit en voer vervolgens boven client.py uit om het resultaat te zien.
# Following would start a server in background. $ python server.py & # Once server is started run client as follows: $ python client.py
Dit zou het volgende resultaat opleveren −
Got connection from ('127.0.0.1', 48437) Thank you for connecting
Python-internetmodules
Een lijst met enkele belangrijke modules in Python Network/Internet-programmering.
Protocol | Algemene functie | Poort nr. | Python-module |
---|---|---|---|
HTTP | Webpagina's | 80 | httplib, urllib, xmlrpclib |
NNTP | Usenet-nieuws | 119 | nntplib |
FTP | Bestandsoverdrachten | 20 | ftplib, urllib |
SMTP | E-mail verzenden | 25 | smtplib |
POP3 | E-mail ophalen | 110 | poplib |
IMAP4 | E-mail ophalen | 143 | imaplib |
Telnet | Opdrachtregels | 23 | telnetlib |
Gopher | Documentoverdrachten | 70 | gopherlib, urllib |
Controleer alle bovengenoemde bibliotheken om te werken met FTP-, SMTP-, POP- en IMAP-protocollen.
Verdere metingen
Dit was een snelle start met Socket Programming. Het is een uitgebreid onderwerp. Het wordt aanbevolen om de volgende link te gebruiken om meer details te vinden −
-
Unix Socket-programmering.
-
Python Socket-bibliotheek en modules.
Python