Python Socket-programmering - Før jeg begynner med Python Socket-programmering, håper jeg du har gode grunnleggende om python. Hvis du kjenner Django også, ville det være enda lettere å forstå. Nei, socket-programmering er ikke relatert til Django, men terminologiene i Python socket-programmering og Django er nesten de samme, selv om de er to forskjellige kategorier. Så til å begynne med, hva er egentlig Python Socket-programmering? Python Socket-programmering er ikke bare der i python, men også i Java og nesten alle andre programmeringsspråk. Men når det gjelder python er socket-programmering faktisk veldig lett å forstå. Python Socket-programmering betyr nettverksprogrammering. Den inkluderer klientsiden og Python Socket-serverrelaterte koder. Men definisjonen er like god som en bok som sier at C-programmering brukes til å utvikle programvare. Og nei, jeg er ikke her for det. Jeg er her for å sikre at du får en dypere forståelse av det grunnleggende i Python-socket-programmering, før du faktisk begynner å skrive dine egne socket-moduler. La oss komme i gang og se hvordan socket fungerer enten på klientsiden eller på Python Socket-serversiden.

Hva er Python Socket-programmering?

Hvis du har lært C-programmering, ville det være veldig enkelt å lære python socket-programmering i Python, siden de er nesten like. For å gjøre det enklere er programmering av python socket bare koder for hvordan datamaskiner i et nettverk kommuniserer med hverandre. Og dette ender ikke med bare et LAN-basert nettverk, det støtter også WAN, MAN og intranettbaserte nettverk. Vi bruker til og med stikkontakter i vårt daglige liv. Forstår ikke? La meg gi deg et enkelt eksempel. Når du vil koble til lar oss si Facebook.com, skriver du enkelt det samme i URL-linjen. Så denne tilkoblingen du nettopp opprettet, er ikke bare opprettet av DNS-ting. Alt dette er konfigurert gjennom programmering av python socket. Sockets bestemmer hvordan to nettverk kommuniserer. All kommunikasjon som går gjennom et nettverk, kan det være en video, VOIP-tilkoblinger eller bare tekst; alt går gjennom en stikkontakt. Nå som vi vet hva sockets er, kan vi utvikle vår egen socket i python.

Bildekilde: pixabay.com

Typer Python Socket-programmering

Nå er det masse stikkontakter der ute. Men vi snakker ikke om dem alle, siden jeg ikke kan dekke hver eneste en av dem her. Du kan enten lage en UDP-kontakt, TCP-kontakt eller til og med en portkontakt, og det er mange flere hvis jeg fortsetter. Men jeg vil se mer på TCP- og UDP-stikkontakter i dag, siden de er mest grunnleggende og de kan være ekstremt gode som nybegynner for å komme i gang med Python Socket-programmering.

  • UDP Sockets Programming

User Datagram Protocol eller dets ofte kjent som UDP er en alternativ protokoll til TCP som overfører pakker fra en vert til en annen. Men i motsetning til TCP (transmisjonskontrollprotokoll), er UDP en tilkoblingsfri protokoll, og den er ikke-strømorientert. Dette betyr at UDP-serveren bare vil fange inn innkommende pakker fra hele verten uten å identifisere en pålitelig kildetilkobling. Vi vil bruke socket.socket-funksjonen for å gjøre dette. En enkel UDP-sokkel opprettes på følgende måte i Python:

import socket #importing socket module from python library # Nå må vi lage AF_INET og sock dgram socketss = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) Skriv ut "Socket Creation Successful"

Ja. Det er det, og vi har laget en enkel UDP-stikkontakt her i python. Python Socket Programmering eller til og med lage en enkel socket er ikke rakettvitenskap. Men den store saken ligger i å kode UDP-serveren og klienten. Siden UDP-stikkontakter er tilkoblingsfrie, startes kommandoer med sending og mottak av sokkelfunksjoner. Disse funksjonene krever ikke at de skal kobles til hverandre. De kan faktisk sende og motta pakker fra enhver tilfeldig kilde. Slik opprettes en UDP-server:

import socketport = 2924s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) s.bind ((“”, port)) skriv ut “Be om tilkobling til porten på maskinen”, port

mens 1:

data, adresse = s.recvfrom (1024)

skrive ut data

Dette virker kanskje ikke så mye, men det er slik det faktisk opprettes. Man kan bruke hvilken som helst port her. Jeg har nettopp valgt en tilfeldig som 2924. UDP-serveren trenger en port for å være åpen for å sende og motta innkommende tilkoblinger. Det er ingen lytting til port eller godta tilkoblinger eller forespørsel. Det skjer bare uten noen godkjenning. Prøv å kjøre serveren ovenfor på en terminal og se hvordan den fungerer.

Dette er bare en enkel UDP-server som vi har laget. Kan gjøre det litt mer interessant og også litt mer komplisert:

”'Dette er en enkel UDP-socket-server”. Import socketimport-systemer

HOST = “” # Man kan prøve alle tilgjengelige grensesnitt her

PORT = 2924 # Enhver tilfeldig port som ikke brukes som standard på windows eller Linux-distros

# Koding av UDP-kontakten

prøv:

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

skriv ut “Socket initialized” '

unntatt socket.error, msg:

print “Oppretting av socket mislyktes. Følgende feil oppstod: ”+ str (msg (0)) + 'Melding' + msg (1)

sys.exit ()

# Nå må vi binde denne kontakten til verten og porten ovenfor

prøve:

s.bind ((HOST, PORT))

unntatt socket.error, msg:

skriv ut “Binding Socket failed. Etter feil avbrøt bindingen: ”+ str (msg (0)) + 'Message' + msg (1)

sys.exit ()

print 'Stikkbinding fullført'

# Opprettholde den etablerte forbindelsen

mens 1:

# fange data fra klienten ved å bruke variable data og adresse

d = s.recvfrom (1024)

data = d (0)

adresse = d (1)

hvis ikke data:

gå i stykker

svar = 'OK …' + data

s.sendto (svar, adresse)

skriv ut 'Token melding (' + adresse (0) + ':' + str (adresse (1)) + ') -' + data.strip ()

s.close ()

Kjør programmet over, så starter du en UDP Server på porten 2924. Gratulerer, du har opprettet en Socket i Python vellykket. Og sørg for at du gjør oppmerksom på at en UDP-server kan håndtere mange klienter i motsetning til TCP-serveren. Hovedårsaken er at det ikke er noen fast tilkobling på en UDP-server, som for en TCP-server.

Anbefalte kurs

  • Sertifiseringskurs i rubin debugging
  • PHP MySQL-kurs
  • VB.NET-sertifiseringskurs for programmering
  • Fullfør ITIL Foundation Training
  • UDP-klientprogrammering

Når vi nå har opprettet en UDP-server, trenger vi en klient å opprette en riktig forbindelse til den slik at vi vet at den fungerer. Så lar oss jobbe med å lage en ordentlig UDP-klient i Python. Denne klienten kobles til UDP-serveren vi opprettet ovenfor:

”Opprette en enkel UDP-klient usind sockets” importere socketimport-systemer

# Opprette en UDP-sokkel

prøve:

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

unntatt socket.error:

print 'Socket Creation failed'

sys.exit ()

host = '127.0.0.1'; # Du kan også prøve å bruke localhost insead av denne IP-en, begge er de samme.

port = 2924;

mens (1):

msg = raw_input ('Skriv inn en melding som skal sendes til server:')

prøv:

#Nå må vi stille strengene

s.sendto (msg, (vert, port))

# Nå må vi motta data og adresse fra klienten ved hjelp av data og adresse

d = s.recvfrom (1024)

svar = d (0)

adresse = d (1)

skriv ut 'Svar fra server er:' + svar

unntatt socket.error, msg:

print 'Følgende feil dukket opp:' + str (msg (0)) + 'Message' + msg (1)

sys.exit ()

Jepp. Å lage en UDP-klient i Python Socket-programmering er mye enklere enn å lage en UDP-server. Men slik går det. Jeg tror ikke jeg vil trenge å forklare noe fra ovennevnte kode, siden jeg allerede har nevnt alle de nødvendige tingene i # tag-kommentarene. Bare sørg for at IP-adressen og porten du har skrevet inn er riktig, og at brannmuren ikke blokkerer forbindelsen, ellers vil det alltid føre til feil uansett hva.

  • TCP Socket-programmering

Nå som vi har lært hvordan du oppretter en UDP-klient og server, kan vi ta en titt på programmering av TCP-stikkontakter. Vi bruker den samme socket.socket-funksjonen for å lage en TCP-socket her.

import socket # Import of module socket from python libraries # create a AF_INET and stream socketss = socket.socket (socket.AF_INET, socket.SOCK_STREAM) print 'Socket Creation Successful'

Her brukes AF_INET til Ipv4-adressetilkobling, og sokkestrøm er en TCP-orientert protokoll. Dette er en enkel TCP-kontakt som vi har laget. Nå skal vi lage en avansert versjon av samme ting. Vi kommer til å kaste unntak også her, på samme måte som vi kastet det når vi oppretter UDP-servere og klienter, slik at i tilfelle tilkoblingen mislykkes, vil vi vite hvor selve programmet ligger. Socket.error vil bli brukt til å håndtere alle disse feilene som tilsvarer UDP-programmering.

La oss nå lage en socket med ovennevnte feilhåndtering og koble til verten facebook.com. Slik må det gjøres:

import socket #importing socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

unntatt socket.error, msg:

print 'Socket Creation mislyktes. Etter feil oppstod: '+ str (msg (0)) +', Feilmelding: '+ msg (1)

sys.exit ();

skriv ut 'Socket Creation vellykket'

host = 'www.facebook.com'

havn = 2924

prøve:

remote_ip = socket.gethostbyname (vert)

unntatt socket.gaierror:

print 'Ukorrekt vertsnavn. Avslutter …'

sys.exit ()

print ”+ host + IP-adresse” er ”+ remote_ip

s.connect ((remote_ip, port))

skriv ut 'Socket Connected to' + host + 'på ip' + remote_ip

Nå er dette nok hvis vi bare trenger en forbindelse. Men det er ikke vårt mål. Vi har til hensikt å opprette en forbindelse der vi også kan sende og motta data i begge ender. Vi kan sende data ved hjelp av sendall-funksjonen. Så her går det slik:

import socket #importing socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

unntatt socket.error, msg:

print 'Socket Creation mislyktes. Etter feil oppstod: '+ str (msg (0)) +', Feilmelding: '+ msg (1)

sys.exit ();

skriv ut 'Socket Creation vellykket'

host = 'www.facebook.com'

havn = 2924

prøve:

remote_ip = socket.gethostbyname (vert)

unntatt socket.gaierror:

print 'Ukorrekt vertsnavn. Avslutter …'

sys.exit ()

print ”+ host + IP-adresse” er ”+ remote_ip

s.connect ((remote_ip, port))

skriv ut 'Socket Connected to' + host + 'på ip' + remote_ip

# overføre data ved hjelp av sendall-funksjonen

melding = “GET / HTTP / 1.1 \ r \ n \ r \ n”

prøv:

s.sendall (melding)

unntatt socket.error:

#Send mislyktes

print 'Overføringsfeil'

sys.exit ()

skriv ut 'Meldingstatus: sendt'

Nå som vi har opprettet en vellykket forbindelse og vi også kan sende dataene, kan vi se hvordan vi kan motta dataene helt. Slik går det:

import socket #importing socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

unntatt socket.error, msg:

print 'Socket Creation mislyktes. Etter feil oppstod: '+ str (msg (0)) +', Feilmelding: '+ msg (1)

sys.exit ();

skriv ut 'Socket Creation vellykket'

host = 'www.facebook.com'

havn = 2924

prøve:

remote_ip = socket.gethostbyname (vert)

unntatt socket.gaierror:

print 'Ukorrekt vertsnavn. Avslutter …'

sys.exit ()

print ”+ host + IP-adresse” er ”+ remote_ip

s.connect ((remote_ip, port))

skriv ut 'Socket Connected to' + host + 'på ip' + remote_ip

# overføre data ved hjelp av sendall-funksjonen

melding = “GET / HTTP / 1.1 \ r \ n \ r \ n”

prøv:

s.sendall (melding)

unntatt socket.error:

#Send mislyktes

print 'Overføringsfeil'

sys.exit ()

skriv ut 'Meldingstatus: sendt'

# Nå for å motta data bruker vi recv-funksjonen for å oppnå dem

svar = s.recv (4096)

trykk svar

Den siste tingen er at vi trenger å lukke stikkontakten som vi kan gjøre det med følgende kode:

s.close ()

Og til slutt, den bindende delen. Vi kan bruke funksjonen bind for å binde sammen stikkontakter med ip-adresser og porter.

import socketimport sysHOST = ”# Dette er på samme måte som vi gjorde i UDP-protokollenPORT = 2924 # port for å få tilgang til data.

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

skriv ut 'Oppretting av socket vellykket

prøve:

s.bind ((HOST, PORT))

unntatt socket.error, msg:

print 'Bindingen mislyktes. Følgende feil oppstod '+ str (msg (0)) +' Melding '+ msg (1)

sys.exit ()

print 'Socket Binding vellykket'

Nå må vi lytte innkommende for innkommende tilkoblinger hvis vi trenger at serveren skal koble seg til. Dette kan gjøres med følgende enkle kommando:

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

Og til slutt, må vi lage en stikkontakt for å godta disse tilkoblingene:

import socketimport sysHOST = ”PORT = 2924

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

skriv ut 'Socket Creation vellykket'

prøve:

s.bind ((HOST, PORT))

unntatt socket.error, msg:

print 'Bindingen mislyktes. Etter feil Oppstod '+ str (msg (0)) +' Melding '+ msg (1)

sys.exit ()

skriv ut 'Stikkbinding vellykket'

s.listen (10)

print 'Listener startet'

# Godta tilkoblinger

conn, addr = s.accept ()

#Giver tilkoblet klientinfo

print 'Forbindelse etablert med' + addr (0) + ':' + str (addr (1))

Det er faktisk mye mer med dette. Vi kan også skrive koder for håndterere og andre ting. Men jeg tror dette ville være det for nå. Forsikre deg om at du har disse grunnleggende elementene riktig, hvoretter de gjenværende delene bare er et kakestykke å lære.

Første bildekilde: pixabay.com

Relaterte artikler:-

Her er noen artikler som hjelper deg å få mer detaljert informasjon om Python Socket-programmering, så bare gå gjennom lenken.

  1. 25 mest fantastiske Python-intervjuspørsmål og svar
  2. Karrierer i Python
  3. Hva er fordelene og begrensningene ved å bruke Python?
  4. Viktig forskjell Python vs Ruby Performance
  5. Introduksjon til Socket-programmering i PHP
  6. Socket-programmering i Java | Socket Class Method