Python Socket-programmering - Innan jag börjar med Python Socket-programmering, hoppas jag att du har bra grunder i python. Om du känner till Django också, skulle det vara ännu lättare att förstå. Nej, socket-programmering är inte relaterat till Django, men terminologierna i Python-sockelprogrammering och Django är nästan desamma, även om de är två olika kategorier. Så till att börja med, vad är Python Socket-programmering exakt? Python Socket-programmering finns inte bara i Python, utan också i Java och nästan alla andra programmeringsspråk. Men när det gäller python är socket-programmering faktiskt väldigt lätt att förstå. Python Socket-programmering betyder nätverksprogrammering. Den innehåller klientsidan och Python Socket-serverns relaterade koder. Men den definitionen är lika bra som en bok om C-programmering används för att utveckla programvara. Och nej, jag är inte här för det. Jag är här för att se till att du får en djupare förståelse för grunderna i Python-sockelprogrammering, innan du faktiskt börjar skriva dina egna socketmoduler. Så låter oss komma igång och se hur socket fungerar antingen på klientsidan eller på Python Socket-serversidan.

Vad är Python Socket-programmering?

Om du har lärt dig C-programmering skulle det vara mycket enkelt att lära sig Python-sockelprogrammering i Python eftersom de är nästan desamma. För att göra det enklare är Python-sockelprogrammering bara kodkoder för hur datorer i ett nätverk kommunicerar med varandra. Och detta slutar inte bara med ett LAN-baserat nätverk, det stöder också WAN-, MAN- och intranätbaserade nätverk. Vi använder till och med uttag i vårt dagliga liv. Förstår inte? Låt mig ge dig ett enkelt exempel. När du vill ansluta till låt oss säga Facebook.com skriver du enkelt samma sak i URL-fältet. Så den här anslutningen som du just skapade skapas inte bara av DNS-grejerna. Allt detta konfigureras genom programmering av Python-socket. Sockets avgör hur två nätverk ska kommunicera. All kommunikation som går via ett nätverk, kan det vara en video, VOIP-anslutningar eller bara text; allt går genom ett uttag. Nu när vi vet vad som är uttag kan vi utveckla vårt eget uttag i python.

Bildkälla: pixabay.com

Typer av Python Socket-programmering

Nu finns det massor av uttag där ute. Men vi kommer inte att prata om dem alla eftersom jag inte kan täcka var och en av dem här. Du kan antingen skapa ett UDP-uttag, TCP-uttag eller till och med ett portuttag och det finns många fler om jag fortsätter. Men jag skulle titta mer på TCP- och UDP-uttag idag eftersom de är de mest grunderna och de kan vara extremt bra som en nybörjare för att komma igång med Python Socket-programmering.

  • UDP-uttagsprogrammering

Användardatagramprotokoll eller dess allmänt kända som UDP är ett alternativt protokoll till TCP som överför paket från en värd till en annan. Men till skillnad från TCP (överföringskontrollprotokoll) är UDP ett anslutningsfritt protokoll och det är icke-strömorienterat. Detta innebär att UDP-servern bara kommer att fånga inkommande paket från hela värden utan att identifiera en tillförlitlig källanslutning. Vi kommer att använda socket.socket-funktionen för att göra detta. Ett enkelt UDP-uttag skapas på följande sätt i Python:

importera socket # importera socketmodul från pythonbiblioteket # Nu måste vi skapa AF_INET och socka dgram socketss = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) skriva ut "Socket Creation Successful"

Ja. Det är det och vi har skapat ett enkelt UDP-uttag här i python. Python Socket Programmering eller till och med skapa en enkel socket är inte raketvetenskap. Men den stora saken ligger i att koda UDP-servern och klienten. Eftersom UDP-uttag är kopplingslösa, startas kommandon med sändnings- och mottagningsfunktioner. Dessa funktioner kräver inte att de är anslutna till varandra. De kan faktiskt skicka och ta emot paket från valfri slumpmässig källa. Så här skapas en UDP-server:

import socketport = 2924s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) s.bind ((“”, port)) skriva ut “Begär anslutning till porten på maskinen”, port

medan 1:

data, adress = s.recvfrom (1024)

skriva ut data

Det verkar inte mycket, men det är så det skapas. Man kan använda valfri port här. Jag har just valt en slumpmässig som 2924. UDP-servern behöver en port för att vara öppen för att skicka och ta emot inkommande anslutningar. Det finns ingen lyssna på port eller acceptera anslutningar eller begäran. Det händer bara utan någon autentisering. Prova att köra ovanstående server på en terminal och se hur den fungerar.

Detta är bara en enkel UDP-server som vi har skapat. Låt oss göra det lite mer intressant och också lite mer komplicerat:

”'Detta är en enkel UDP-socket-server”. Importera socketimport-system

HOST = “” # Man kan prova alla tillgängliga gränssnitt här

PORT = 2924 # Vilken slumpmässig port som inte används som standard i Windows eller Linux-distros

# Kodning av UDP-uttaget

Prova :

s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM)

skriva ut "Socket initialized" '

utom socket.error, msg:

print “Socket skapades misslyckades. Följande fel inträffade: ”+ str (msg (0)) + 'Meddelande' + msg (1)

sys.exit ()

# Nu måste vi binda detta uttag till ovanstående värd och port

Prova:

s.bind ((HOST, PORT))

utom socket.error, msg:

tryck “Bindningsuttaget misslyckades. Följande fel avbröt bindningen: ”+ str (msg (0)) + 'Meddelande' + msg (1)

sys.exit ()

tryck "Socketbindning slutförd"

# Behåll den etablerade anslutningen

medan 1:

# fånga in data från klienten med variabel data och adress

d = s.recvfrom (1024)

data = d (0)

adress = d (1)

om inte data:

ha sönder

svar = 'OK …' + data

s.sendto (svar, adress)

tryck 'Token meddelande (' + adress (0) + ':' + str (adress (1)) + ') -' + data.strip ()

s.close ()

Kör ovanstående program så kommer du att starta en UDP-server på porten 2924. Grattis, du har framgångsrikt skapat en Socket i Python. Och se till att du noterar att en UDP-server kan hantera massor av klienter till skillnad från TCP-servern, det främsta skälet är att det inte finns någon fast anslutning på en UDP-server som i fallet med en TCP-server.

Rekommenderade kurser

  • Certifieringskurs i rubinfelsökning
  • PHP MySQL-kurs
  • VB.NET-programcertifieringskurs
  • Komplett ITIL Foundation Training
  • UDP-klientprogrammering

Nu när vi framgångsrikt har skapat en UDP-server behöver vi en klient för att upprätta en korrekt anslutning till den så att vi vet att det fungerar. Så låter oss arbeta med att skapa en riktig UDP-klient i Python. Denna klient kommer att ansluta till vår UDP-server som vi skapade ovan:

”Skapa en enkel UDP-klient usind sockets” importera socketimport-system

# Skapa ett UDP-uttag

Prova:

s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM)

utom socket.error:

skriva ut "Socket Creation failed"

sys.exit ()

värd = '127.0.0.1'; # Du kan också prova att använda localhost insead av denna IP, båda är desamma.

port = 2924;

medan (1):

msg = raw_input ('Skriv in ett meddelande som ska skickas till servern:')

Prova :

# Nu måste vi ställa in strängarna

s.sendto (msg, (värd, port))

# Nu måste vi ta emot data och adress från klienten med hjälp av data och adress

d = s.recvfrom (1024)

svar = d (0)

adress = d (1)

skriv ut 'Svar från servern är:' + svar

utom socket.error, msg:

print 'Följande fel uppstod:' + str (msg (0)) + 'Meddelande' + msg (1)

sys.exit ()

Japp. Att skapa en UDP-klient i Python Socket-programmering är mycket lättare än att skapa en UDP-server. Men det är så det går. Jag tror inte att jag skulle behöva förklara någonting från ovanstående kodkod, eftersom jag redan har nämnt alla nödvändiga saker i kommentarerna # taggen. Se bara till att IP-adressen och porten du har angett är korrekt och att din brandvägg inte blockerar anslutningen, annars kommer det alltid att resultera i fel oavsett vad.

  • TCP-sockelprogrammering

Nu när vi har lärt oss hur du skapar en UDP-klient och server kan vi titta på programmering av TCP-uttag. Vi kommer att använda samma socket.socket-funktion för att skapa ett TCP-uttag här.

importera socket # Importera moduluttaget från pythonbibliotek # skapa en AF_INET och ström sockets = socket.socket (socket.AF_INET, socket.SOCK_STREAM) skriva ut 'Socket Creation Successful'

Här används AF_INET för Ipv4-adressanslutning, och sockströmmen är ett TCP-orienterat protokoll. Detta är ett enkelt TCP-uttag som vi har skapat. Nu kommer vi att skapa en avancerad version av samma sak. Vi kommer också att kasta in undantag här, på samma sätt som vi kastade det när vi skapade UDP-servrar och klienter så att i fall anslutningen misslyckas, vet vi var själva programmet ligger. Socket.error kommer att användas för att hantera alla dessa fel liknande de för UDP-programmering.

Så låt oss nu skapa ett uttag med ovanstående felhantering och ansluta till värden facebook.com. Så här måste det göras:

importera socket #importera socketmodulenimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

utom socket.error, msg:

print 'Socket Creation misslyckades. Följande fel inträffade: '+ str (msg (0)) +', Felmeddelande: '+ msg (1)

sys.exit ();

skriva ut "Socket Creation framgångsrikt"

host = 'www.facebook.com'

port = 2924

Prova:

remote_ip = socket.gethostbyname (värd)

utom socket.gaierror:

print 'Felaktig värdnamn. Avsluta …'

sys.exit ()

skriva ut ”+ värd + IP-adress” är ”+ fjärrpip

s.connect ((remote_ip, port))

skriv ut 'Socket Ansluten till' + host + 'på ip' + remote_ip

Nu räcker det om vi bara behöver få en anslutning igång. Men det är inte vårt mål. Vi tänker skapa en anslutning där vi kan skicka och ta emot data också i båda ändarna. Vi kan skicka data med Sendall-funktionen. Så här går det så:

importera socket #importera socketmodulenimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

utom socket.error, msg:

print 'Socket Creation misslyckades. Följande fel inträffade: '+ str (msg (0)) +', Felmeddelande: '+ msg (1)

sys.exit ();

skriva ut "Socket Creation framgångsrikt"

host = 'www.facebook.com'

port = 2924

Prova:

remote_ip = socket.gethostbyname (värd)

utom socket.gaierror:

print 'Felaktig värdnamn. Avsluta …'

sys.exit ()

skriva ut ”+ värd + IP-adress” är ”+ fjärrpip

s.connect ((remote_ip, port))

skriv ut 'Socket Ansluten till' + host + 'på ip' + remote_ip

# överföra data med hjälp av sendallfunktionen

meddelande = "GET / HTTP / 1.1 \ r \ n \ r \ n"

Prova :

s.sendall (meddelande)

utom socket.error:

#Sändningen misslyckades

tryck "Överföringsfel"

sys.exit ()

tryck "Meddelande Status: Skickat"

Nu när vi har skapat en framgångsrik anslutning och vi också kan skicka data kan vi ta en titt på hur vi kan få informationen helt och hållet. Så här går det:

importera socket #importera socketmodulenimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

utom socket.error, msg:

print 'Socket Creation misslyckades. Följande fel inträffade: '+ str (msg (0)) +', Felmeddelande: '+ msg (1)

sys.exit ();

skriva ut "Socket Creation framgångsrikt"

host = 'www.facebook.com'

port = 2924

Prova:

remote_ip = socket.gethostbyname (värd)

utom socket.gaierror:

print 'Felaktig värdnamn. Avsluta …'

sys.exit ()

skriva ut ”+ värd + IP-adress” är ”+ fjärrpip

s.connect ((remote_ip, port))

skriv ut 'Socket Ansluten till' + host + 'på ip' + remote_ip

# överföra data med hjälp av sendallfunktionen

meddelande = "GET / HTTP / 1.1 \ r \ n \ r \ n"

Prova :

s.sendall (meddelande)

utom socket.error:

#Sändningen misslyckades

tryck "Överföringsfel"

sys.exit ()

tryck "Meddelande Status: Skickat"

# Nu för att få data använder vi recv-funktionen för att uppnå dem

svar = s.recv (4096)

tryck svar

Det sista är att vi måste stänga uttaget, vilket vi kan göra med följande kod:

s.close ()

Och slutligen den bindande delen. Vi kan använda funktionen bind för att binda samman uttag med ip-adresser och portar.

import socketimport sysHOST = ”# Detta är på samma sätt som vi gjorde i UDP-protokollPORT = 2924 # port för att få åtkomst till data.

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

tryck "Skapning av sockel framgångsrik"

Prova:

s.bind ((HOST, PORT))

utom socket.error, msg:

print 'Bindning misslyckades. Följande fel inträffade '+ str (msg (0)) +' Meddelande '+ msg (1)

sys.exit ()

tryck "Socket Binding framgångsrik"

Nu måste vi lyssna på inkommande för inkommande anslutningar om vi behöver servern för att ansluta. Detta kan göras med följande enkla kommando:

s.listen (10) skriva ut 'Listener startet'

Och slutligen måste vi skapa ett uttag för att acceptera dessa anslutningar:

import socketimport sysHOST = ”PORT = 2924

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

skriva ut "Socket Creation framgångsrikt"

Prova:

s.bind ((HOST, PORT))

utom socket.error, msg:

print 'Bindning misslyckades. Följande fel Uppstod '+ str (msg (0)) +' Meddelande '+ msg (1)

sys.exit ()

tryck "Socketbindning framgångsrik"

s.listen (10)

tryck "Lyssnaren startade"

# Acceptera anslutningar

conn, addr = s.accept ()

#Visa anslutna klientinfo

print 'Anslutning upprättad med' + addr (0) + ':' + str (addr (1))

Det finns faktiskt mycket mer till detta. Vi kan också skriva koder för hanterare och andra saker. Men jag tror att detta skulle vara det för nu. Se till att du har de här grunderna korrekta, varefter de återstående delarna bara är en bit kaka att lära sig.

Första bildkälla: pixabay.com

Relaterade artiklar:-

Här är några artiklar som hjälper dig att få mer information om Python Socket-programmering så bara gå igenom länken.

  1. 25 mest fantastiska Pythonintervjufrågor och svar
  2. Karriärer i Python
  3. Vilka är fördelarna och begränsningarna med att använda Python?
  4. Viktig skillnad Python vs Ruby Performance
  5. Introduktion till Socket-programmering i PHP
  6. Socket-programmering i Java | Socket Class Method

Kategori: