Introduktion till Nätverksprogrammering i Python

Denna handledning kommer att ge en introduktion till uttag i Python och hur man använder uttagsmodulen för att bygga HTTP-servrar och klienter i Python. Det kommer också att omfatta Tornado, ett Python nätverk bibliotek som är idealiskt för lång polling, WebSockets och andra applikationer som kräver en långlivad anslutning till varje användare.

Vad är Sockets?

Ett uttag är en länk mellan två applikationer som kan kommunicera med varandra (antingen lokalt på en enda maskin eller på distans mellan två maskiner på olika platser).

I grunden fungerar socklar som en kommunikationslänk mellan två enheter, dvs en server och en klient. En server kommer att ge ut information som begärs av en klient. När du till exempel besökte den här sidan skapade webbläsaren ett uttag och kopplade till servern.

Uttaget Modul

För att skapa ett uttag, använder du socket.socket () funktionen och syntaxen är lika enkel som:

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

Här är beskrivningen av argumenten:

  • socket_family: Representerar adressen (och protokollet) -familjen. Det kan vara antingen AF_UNIX eller AF_INET.
  • socket_type: Representerar kontakttypen, och kan antingen vara SOCK_STREAM eller SOCK_DGRAM.
  • protokoll: Detta är ett valfritt argument, och är vanligtvis 0.

När du har hämtat ditt socketobjekt kan du sedan skapa en server eller klient som önskat med hjälp av de metoder som finns i socketmodulen.

Skapa en enkel klient

Innan vi börjar, låt oss titta på de klientuttagsmetoder som finns i Python.

  • s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
  • s.connect (): Initierar en TCP-serveranslutning.

För att skapa ett nytt uttag, importerar du först socket-metoden i socketklassen.

importuttag

Därefter skapar vi ett strömuttag (TCP) enligt följande:

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

De AF_INET argument anger att du begär ett Internet Protocol (IP) -uttag, speciellt IPv4. Det andra argumentet är transportprotokollstypen SOCK_STREAM för TCP-uttag. Dessutom kan du också skapa ett IPv6-uttag genom att ange socket AF_INET6 argument.

Ange servern.

server = "localhost"

Ange porten vi vill kommunicera med.

port = 80

Anslut uttaget till porten där servern lyssnar.

server_address = ((värd, port)) stream_socket.connect (server_address) 

Det är viktigt att notera att värden och porten måste vara en tupel.

Skicka en dataförfrågan till servern:

message = 'message' stream_socket.sendall (meddelande)

Få svaret från servern:

data = sock.recv (10) utskriftsdata

För att stänga ett anslutet uttag använder du den närmaste metoden:

stream_socket.close ()

Nedan finns den fullständiga koden för klienten / servern.

import socket import sys # Skapa en TCP / IP-uttag stream_socket = socket.socket (socket.AF_INET, socket.SOCK_STREAM) # Definiera värd värd = 'localhost' # definiera kommunikationsporten porten = 8080 # Anslut socket till porten där servern lyssnar server_address = ((värd, port)) skriv ut "ansluta" stream_socket.connect (server_address) # Skicka data message = 'message' stream_socket.sendall (meddelande) # response data = stream_socket.recv (10) uttaget stängt 'stream_socket.close () 

Bygg en enkel server

Låt oss nu titta på en enkel Python-server. Följande är socket server metoder tillgängliga i Python.

  • s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
  • s.bind (): Binder adress (värdnamn, portnummer) till uttaget.
  • s.listen (): Ställer in och startar TCP-lyssnare.
  • s.accept (): Accepterar TCP-klientanslutning.

Vi följer följande steg: 

  • Skapa ett uttag.
  • Binda uttaget till en port.
  • Börja med att acceptera anslutningar på uttaget.

Här är serverns program.

import socket import sys # Skapa en TCP / IP socket sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) # Definiera värd värd = 'localhost' # definiera kommunikationsporten porten = 8080 # Binda uttaget till port socken. binda ((värd, port)) # Lyssna på inkommande anslutningar sock.listen (1) # Vänta på ett anslutningsutskrift "väntar på en anslutning" -anslutning, klient = sock.accept () skrivarklient, "ansluten" # Ta emot data i små bitar och vidarebefordra det data = connection.recv (16) skriv 'mottagna'% s ''% data om data: connection.sendall (data) annars: skriv ut 'ingen data från', klient # Stäng anslutningsanslutningen () 

Servern är nu klar för inkommande anslutningar.

Kör nu klient- och serverns program i separata terminalfönster, så de kan kommunicera med varandra.

Serverutgång

$ python server.py väntar på en anslutning ("127.0.0.1", 47050) ansluten mottaget "meddelande" 

Klientutgång

$ python client.py anslutningsmeddelandet stängt 

Tornado Framework

Tornado-ramen är ett av de bibliotek som är tillgängliga för nätverksprogrammering i Python. I det här avsnittet diskuterar vi det här biblioteket och visar hur du använder det för att bygga WebSockets.

Tornado är ett Python webb ramverk och asynkron nätverksbibliotek. Tornado använder det icke-blockerande nätverket I / O, och kan därför skala till tiotusentals öppna anslutningar. Denna egenskap gör den idealisk för lång polling, WebSockets och andra applikationer som kräver en långlivad anslutning till varje användare.

Låt oss skapa en enkel Tornado WebSocket:

importera tornado.ioloop import tornado.web klass ApplicationHandler (tornado.web.RequestHandler): def get (self): self.message = message = "" "  Tornado Framework  Välkommen till Tornado-ramen  "" "self.write (meddelande) om __name__ ==" __main__ ": application = tornado.web.Application ([(r" / "ApplicationHandler),") application.listen (5001) tornado.ioloop.IOLoop.instance ().Start() 

I koden ovan:

  • Vi definierar klassen ApplicationHandler som fungerar som hanteraren för en förfrågan och returnerar ett svar med hjälp av skriva() metod.
  • De huvud Metod är posten för programmet.
  • tornado.web.Application skapar en bas för webbapplikationen och tar en samling hanterare, dvs ApplicationHandler.
  • Applikationen lyssnar på port 5000, och en klient kan kommunicera med den här applikationen med samma port.
  • tornado.ioloop.IOLoop.instance (). start () skapar en nonblocking-tråd för en applikation.

Om vi ​​kör programmet kommer vi att få resultatet som visas på skärmdumpen nedan.

Slutsats

Nu måste du ha förstått grunderna för socket programmering i Python och hur du kan bygga en enkel server och klient. Gärna experimentera genom att bygga din egen chattklient. För mer information, besök de officiella Python-dokumenten.

Tveka inte heller att se vad vi har till salu och studera på Envato Market, och tveka inte att ställa några frågor och ge din värdefulla feedback genom att använda foderet nedan.