Introduksjon til nettverksprogrammering i Python

Denne opplæringen vil gi en introduksjon til stikkontakter i Python og hvordan du bruker stikkmodulen til å bygge HTTP-servere og klienter i Python. Det vil også dekke Tornado, et Python nettverksbibliotek som er ideelt for lang polling, WebSockets og andre applikasjoner som krever en lang levetidstilkobling til hver bruker.

Hva er Sockets?

En stikkontakt er en kobling mellom to applikasjoner som kan kommunisere med hverandre (enten lokalt på en enkelt maskin eller eksternt mellom to maskiner på forskjellige steder).

I utgangspunktet fungerer stikkontakter som en kommunikasjonsforbindelse mellom to enheter, det vil si en server og en klient. En server vil gi ut informasjon som blir forespurt av en klient. For eksempel, når du besøkte denne siden, opprettet nettleseren en stikkontakt og koblet til serveren.

Stikkmodulen

For å skape en stikkontakt, bruker du socket.socket () funksjon, og syntaksen er så enkel som:

import socket s = socket.socket (socket_family, socket_type, protokoll = 0)

Her er beskrivelsen av argumentene:

  • socket_family: Representerer adressen (og protokollen) familien. Det kan enten være AF_UNIX eller AF_INET.
  • socket_type: Representerer stikkontakten, og kan enten være SOCK_STREAM eller SOCK_DGRAM.
  • protokollen: Dette er et valgfritt argument, og det er vanligvis 0.

Etter å ha oppnådd sokkelobjektet, kan du deretter opprette en server eller klient som ønsket ved hjelp av metodene som er tilgjengelige i stikkmodulen.

Lag en enkel klient

Før vi kommer i gang, la oss se på klientinngangsmetodene som er tilgjengelige i Python.

  • s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
  • s.connect (): Starter en TCP-serverforbindelse.

For å lage en ny stikkontakt, importerer du først sokkelmetoden til stikkontakten.

Importkontakt

Deretter oppretter vi en strømuttak (TCP) som følger:

stream_socket = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

De AF_INET argument indikerer at du ber om en Internett-protokoll (IP) -kontakt, spesielt IPv4. Det andre argumentet er transportprotokoll typen SOCK_STREAM for TCP-kontakter. I tillegg kan du også opprette en IPv6-kontakt ved å spesifisere kontakten AF_INET6 argument.

Angi serveren.

server = "localhost"

Angi porten vi vil kommunisere med.

port = 80

Koble kontakten til porten der serveren lytter.

server_address = ((vert, port)) stream_socket.connect (server_address) 

Det er viktig å merke seg at verten og porten må være en tuple.

Send en dataforespørsel til serveren:

message = 'message' stream_socket.sendall (melding)

Få svar fra serveren:

data = sokk.recv (10) utskriftsdata

For å lukke en tilkoblet kontakt, bruker du nærmetoden:

stream_socket.close ()

Nedenfor er hele koden for klienten / serveren.

import socket import sys # Opprett en TCP / IP-kontakt stream_socket = socket.socket (socket.AF_INET, socket.SOCK_STREAM) # Definer vertsverten = 'localhost' # definer kommunikasjonsportporten = 8080 # Koble kontakten til porten der serveren lytter server_address = ((vert, port)) print "connect" stream_socket.connect (server_address) # Send data message = 'message' stream_socket.sendall (melding) # respons data = stream_socket.recv (10) stikkontakt lukket 'stream_socket.close () 

Bygg en enkel server

La oss ta en titt på en enkel Python-server. Følgende er socket server metoder tilgjengelig i Python.

  • s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
  • s.bind (): Binder adresse (vertsnavn, portnummer) til stikkontakt.
  • s.listen (): Setter opp og starter TCP-lytteren.
  • s.accept (): Godtar TCP-klienttilkobling.

Vi følger følgende trinn: 

  • Lag en stikkontakt.
  • Fest stikkontakten til en port.
  • Begynn å akseptere tilkoblinger på stikkontakten.

Her er serverprogrammet.

import socket import sys # Lag en TCP / IP socket socket = socket.socket (socket.AF_INET, socket.SOCK_STREAM) # Definer vertsverten = 'localhost' # definer kommunikasjonsporten port = 8080 # Bind stikkontakten til port sokkelen. bind ((vert, port)) # Lytt til innkommende tilkoblinger sock.listen (1) # Vent på en tilkoblingsutskrift 'venting på en tilkobling' tilkobling, klient = sock.accept () utskriftsklient, 'koblet' # Motta dataene i små biter og send det om igjen data = connection.recv (16) print 'mottatt'% s ''% data hvis data: connection.sendall (data) annet: skriv ut 'ingen data fra', klient # Lukk tilkoblingsforbindelsen. () 

Serveren er nå klar for innkommende tilkoblinger.

Kjør nå klient- og serverprogrammene i separate terminalvinduer, slik at de kan kommunisere med hverandre.

Server Output

$ python server.py venter på en tilkobling ('127.0.0.1', 47050) tilkoblet mottatt "melding" 

Klientutgang

$ python client.py Koble til meldingsuttak lukket 

The Tornado Framework

Tornado-rammen er en av bibliotekene som er tilgjengelige for nettverksprogrammering i Python. I denne delen diskuterer vi dette biblioteket og viser hvordan du bruker det til å bygge WebSockets.

Tornado er et Python web rammeverk og asynkron nettverk bibliotek. Tornado bruker det ikke-blokkerende nettverket I / O, og er dermed i stand til å skalere til titusenvis av åpne forbindelser. Denne egenskapen gjør den ideell til langvarig polling, WebSockets og andre applikasjoner som krever en lang levetidstilkobling til hver bruker.

La oss lage en enkel Tornado WebSocket:

importere tornado.ioloop import tornado.web klasse ApplicationHandler (tornado.web.RequestHandler): def get (selv): self.message = message = "" "  Tornado Framework  Velkommen til Tornado-rammen  "" "self.write (melding) hvis __name__ ==" __main__ ": application = tornado.web.Application ([(r" / "ApplicationHandler),") application.listen (5001) tornado.ioloop.IOLoop.instance ().start() 

I koden ovenfor:

  • Vi definerer klassen ApplicationHandler som fungerer som handler for en forespørsel og returnerer et svar ved hjelp av skrive() metode.
  • De hoved- Metode er oppføringen for programmet.
  • tornado.web.Application lager en base for webapplikasjonen og tar en samling av håndteringsprogrammer, dvs. ApplicationHandler.
  • Programmet lytter på port 5000, og en klient kan kommunisere til dette programmet ved hjelp av samme port.
  • tornado.ioloop.IOLoop.instance (). start () lager en nonblocking-tråd for et program.

Hvis vi kjører programmet, får vi resultatet som vist på skjermbildet nedenfor.

Konklusjon

Nå må du ha tatt grunnlaget for sokkelprogrammering i Python og hvordan du kan bygge en enkel server og klient. Prøv å eksperimentere ved å bygge din egen chatklient. For mer informasjon, besøk de offisielle Python-dokumentene.

Ikke nøl med å se hva vi har tilgjengelig for salg og for studier i Envato Market, og ikke nøl med å stille spørsmål og gi din verdifulle tilbakemelding ved å bruke feedet under.