Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Python

Python - Netwerkprogrammering

Vorige paginaVolgende pagina

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 −

  • Een tekenreeks, die een hostnaam, een adres met vier punten of een IPV6-adres in dubbele punt (en mogelijk punt) kan zijn

  • Een tekenreeks "", die een INADDR_BROADCAST-adres specificeert.

  • Een tekenreeks met lengte nul, die INADDR_ANY specificeert, of

  • Een geheel getal, geïnterpreteerd als een binair adres in hostbytevolgorde.

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

  1. Python-gegevenstypen
  2. Python-operators
  3. Python pass-instructie
  4. Python-functieargumenten
  5. Python-woordenboek
  6. Objectgeoriënteerd programmeren in Python
  7. Python-iterators
  8. Python-sluitingen
  9. Python datetime
  10. Python-slaap()
  11. Python - Programmeren met meerdere threads